问题描述
比如说有两个类:Group和Member,一个Group中有多个Member,不考虑一个Member对应多个Group,即假设这是一个一对多关联。并假设这个关联是双向的,则Group类可表述如下:ClassGroup{intid;Stringname;Set<Member>members=newHashSet<Member>();//省略无参构造函数及getter()和setter()方法}Member类如下所示:ClassMember{intid;Stringname;intage;Groupgroup;//省略无参构造函数及getter()和setter()方法}配置文件就是正常的那种配置,比如说cascade="all",inverse="false"lazy="false"等数据库Member表中有个groupid作为外键,参考的是Group表中的id,没错,就是你们想象中的那样。在这种情况下可以实现级联删除,保存,查找,但是就是级联更新的时候出现问题。比如我要更新某一个Group的Member,采用如下所示代码(已简略)publicvoidupdateMembers(intid,Set<Member>new_members){Groupgroup=session.load(Group.class,id);group.setMembers(new_members);session.update(group);}这样的话起不到更新的效果,而是会在Member表中生成一些新的member,之前的member对应的groupid会被置为NULL。哪位大侠能够指点迷津,在此表示感谢。有想法的都可以提一下。
解决方案
解决方案二:
试试把load()改成get()
解决方案三:
楼主改成merge就可以了session.merge(group);
解决方案四:
updateMembers方法中参数new_members里的member有id不为空吗?