`
caoyinghui
  • 浏览: 125918 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate中的inverse属性和cascade属性

阅读更多
写道
假设Customer和Orders 建立一对多的双向关联.

inverse 属性:

//加载持久化对象

Customer customer = (Customer) session.load(Customer.class, new Integer(2));

Orders order = (Orders) session.load(Orders.class,new Integer(2));

//建立关联

order.setCustomer(customer);

customer.getOrders().add(order);

因为Hiberante 自动清理缓存中的持久化对象,按持久化状态的改变来同步更新数据库.所以尽管上面的代码只修改了

orders表中的一条记录但 还是会执行两条update 语句 ,因为内存中的持久化对象的状态发生了两次改变.

而这种多余的sql语句会影响性能.解决这种问题的办法是 把 inverse属性的值设置为 true .

总结:

影射一对多的双向关联时,因该把 one 方的inverse属性值设置为 true .

建立两个对象的双向关联时应该同时修改关联两端的属性.

cascade 属性:

当属性值为

save-update : (级联保存) 时,表明保存或更新当前对象时会级联保存或更新他所关联的对象.

delete :(级联删除) 级联删除所关联的对象.

all-delete-orphan : 自动删除不再和 父对象关联的子对象.并且 在出现上面两种情况时执行上面两种的功能.

可以说是一个全自动的属性值.

一般情况下,当关联双方存在父子关系.就可以把父方的cascade 属性值设置为all-delete-orphan.

父子关系: 由父方来控制子方的生命周期.子对象必须和一个父对象关联.子对象不可孤立存在


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/caoyinghui1986/archive/2008/04/14/2291085.aspx

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics