首页 > 代码库 > 闲聊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