首页 > 代码库 > 闲聊Hibernate中的inverse和cascade

闲聊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不影响


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


闲聊Hibernate中的inverse和cascade