Hibernate 下实现数据的级联插入 (二)

2014-11-24 11:17:38 · 作者: · 浏览: 7
ransaction tx = session.beginTransaction();

try
{
session.save(user);
tx.commit();
}
catch(Exception ex)
{
ex.printStackTrace();
tx.rollback();
}
}


}

下面的这两个hbm.xml文件十分重要

User.hbm.xml


[html]
< xml version="1.0" encoding="UTF-8" >

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">















< xml version="1.0" encoding="UTF-8" >

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
















其中要理解的就是set这个标签,这个标签对应了User对象中的集合对象,name依然是User中属性的名字,inserse为false表示了这种一对多的关系由User来维护,默认值就是false,那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录,比如说当User的状态发生了改变,这种改变会延伸到每一个关联到这个User的Order上。

key标签用来表明,这两个关系是通过那个属性来连接的,那么Order表中的外键是whoid,那么这两个关系是通过whoid来维护的。one-to-many表示一对多的关系,其中class表示Set集合中的对象类型,也可以这么理解,即一对多的关系,多的一方的类型是什么。

Order.hbm.xml

[html]
< xml version="1.0" encoding="UTF-8" >

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">













< xml version="1.0" encoding="UTF-8" >

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">














其中的 many-to-one,表示多对一的关系,name表示Order中表示用来关联用户的那个属性的名称,class表示一的那一方的类型,column表示关联关系中用来连接的列,这里仍然是whoid。

下面是测试代码

[java]
public class Test {

public static void main(String args[])
{
User user = new User();
user.setUsername("Neway");
user.setPassword("admin");
HashSet orders = new HashSet();
Order o1 = new Order();
Order o2 = new Order();
Order o3 = new Order();
orders.add(o1);
orders.add(o2);
orders.add(o3);
user.setOrders(orders);

Session session = HibernateSessionFactory.getSession();
UserDao dao = new UserDao(session);
dao.savaUser(user);



}
}

public class Test {

public static void main(String args[])
{
User user = new User();
user.setUsername("Neway");
user.setPassword("admin");
HashSet orders = new HashSet();
Order o1 = new Order();
Order o2 = new Order();
Order o3 = new Order();
orders.add(o1);
orders.add(o2);
orders.add(o3);
user.setOrders(orders);

Session session = HibernateSessionFactory.getSession();
UserDao dao = new UserDao(session);
dao.savaUser(user);


}
}