标签:
在Hibernate程序中持久化的对象之间会通过关联关系互相引用。对象进行保存、更新和删除等操作时,有时需要被关联的对象也执行相应的操作,如:假设需要关联关系的主动方对象执行操作时,被关联的对象也会同步执行同一操作。这一问题可以通过使用Hibernate的级联(cascade)功能来解决。
属性值 | 描述 |
none | 默认值,表示关联对象之间无级联操作 |
save-update | 表示主动方对象在调用save(),update()和saveOrUpdate()方法时对被关联对象执行保存或更新操作 |
delete | 表示主动方对象在调用delete()方法时被关联对象执行删除操作 |
delete-orphan | 用在1-N关联中,表示主动方对象调用delete()方法时删除不被任何一个关联对象所引用的关联对象,多用于父子关联对象中。 |
all | 等价于save-update和delete的联合使用 |
1 public class BusinessService{ 2 public static void main(String[] args){ 3 Customer customer = new Customer("lisi","123","李四","青岛","123123"); 4 Order order = new Order("3",new Date(),1000.0);//并没有传入customer对象 5 //建立关联关系,实现级联保存 6 customer.getOrders().add(order); 7 8 Session session = HibernateUtils.getSession(); 9 10 Transaction trans = session.beginTransaction(); 11 session.save(customer); 12 trans.commit(); 13 HibernateUtils.closeSession(); 14 } 15 }
1 Customer.hbm.xml 2 <hibernate-mapping package="com.haiersoft.ch05.pojos"> 3 <class name="Custoemr" table="CUSTOMER"> 4 ... ...省略其它代码 5 <!-- 1-N关联关系 --> 6 <set name="orders" cascade="save-update"> 7 <key column="CUSTOMER_ID"/> 8 <one-to-many class="Order"/> 9 </set> 10 </class> 11 </hibernate-mapping>
1 public class BusinessService{ 2 public static void main(String[] args){ 3 //添加客户和订单信息 4 Customer customer = new Customer("lisi","123","李四","青岛市","123123123"); 5 Order order = new Order("3",new Date(),1000.0); 6 //建立关联关系,实现级联保存 7 customer.getOrders().add(order); 8 //order对象必须关联customer对象,inverse才起作用 9 order.setCustomer(customer); 10 11 12 Transaction trans = session.beginTransaction(); 13 session.save(customer); 14 trans.commit(); 15 HibernateUtils.closeSession(); 16 17 } 18 }
上述代码中,利用语句“order.setCustomer(customer)”实现了order到customer对象的关联,当运行main()方法时,Hibernate执行了以下两条insert语句。
级联关系(内容大部分来自JavaEE轻量型解决方案其余的是我的想法)
标签:
原文地址:http://www.cnblogs.com/JamKong/p/4447090.html