闲聊Hibernate中的inverse和cascade

小小的记录一下自己对这两个属性的理解。


假如有两个类

class Group{

private int id;

private Set<User> users  = new ... 

}


class User{

private int id;

private Group  group = new ..

}


他们之间是 一对多的关系   Group (1) ---> User (N) 


inverse   属性的意思是  是否维护 他们之间的关系 ,换句通俗的话来说就是  是否  设置 外键 group_id 的值

当我们在   

Group.hbm.xml  

<set  name="users" >

</set>   

默认inverse = false 也就是group是维护关系的

所以

 User   u = new User();

Group g = new Group();

Set set = new HshSet();

set.add(u);

g.setSet(set);


最后 session.save(g); 就可以了

然而却发现抛异常了,这时候就引出

cascade 了  级联

因为group关联了user,在保存group的时候 user 还不存在 ,所以group想设置外键 group_id的值也没办法,因为数据库不存在此条user记录

除非在 保存 group之前 先session.save(u) 

或者设置

cascade = "save-update"

这样就可以保存成功了



特别要注意的一点是

在 <many-to-one>这边是没有inverse的  因为hibernate 要求多得一方必须维护关系 

cascade不影响


以上代码都是随手敲的。。有些错误 。。能理解这两个属性的 意思就好


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值