再说inverse=true

java 代码
  1. 建议大家好好去看一下这个链接,讲的很详细,虽然是E文,可并不难懂。    
  2. http://www.hibernate.org/155.html    
  3.   
  4. 这篇文章里没有提到delete的情况,我就one-to-many来做个简单说明:    
  5.   
  6.   
  7. 代码   
  8.     
  9. Parent parent = (Parent) session.load(Parent.class, pid);   
  10. session.delete(parent);   
  11.   
  12. 1. 爸爸那边设置了cascade=all和inverse=true    
  13. a. delete from children    
  14. b. delete from parent   
  15.   
  16. 2. 爸爸那边设置了cascade=all,没有设inverse=true    
  17. a. update children set parent_id=null where parent_id=?    
  18. b. delete from children    
  19. c. delete from parent   
  20.   
  21. 因为此时inverse=false,所以爸爸要负责维护relationship,所以它要去把children中的连接信息都清空。但是,如果children的parent_id的constraint设置的是not-null的话,那么很不幸,hibernate执行到2.a就会throw exception了。   
  22.   
  23. 如果你要问,这个inverse=true到底是在源代码中的哪儿判断的呀?请看代码:    
  24.   
  25.   
  26. 代码   
  27.     
  28. ......   
  29.   
  30. SessionImpl.flush();   
  31.   
  32. SessionImpl.execute();   
  33.   
  34. SessionImpl.executeAll(collectionRemovals);   
  35.     executable.execute();   
  36.   
  37. ScheduledCollectionRemove.execute();   
  38.     getPersister().remove( getId(), getSession() );   
  39.   
  40. OneToManyPersister(即AbstractCollectionPersister).remove();   
  41.     if ( !isInverse ) {   
  42.         PreparedStatement st = session.getBatcher().prepareBatchStatement( getSQLDeleteString() );   
  43.     }   
  44.   
  45. OneToManyPersister.getSQLDeleteString();   
  46.     return "update children set parent_id=null where parent_id=?";   
  47.   
  48. ......   
  49.   
  50.     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值