锁定老帖子 主题:hibernate中对集合的共享参照问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-09
最近的开发一直在持久层周围,虽然做hibernate也有一段时间了,但是随着数据库表的增加,遇到了一些以前没有碰到过的问题。其中有一个问题就是对集合的共享参照问题(found shared references to a collection)具体是这样的:
java 代码
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-09
文本编辑器不支持这样的写法吗?发上去的表的结构打乱了,不过结合文字应该能够判断出来三个表之间的关系。
|
|
返回顶楼 | |
发表时间:2007-07-10
问一句,什么叫“共享参照”,你这个是复杂了点,但是有什么问题吗?要维护关系就是把一个对象加入到一个集合中,并且该集合的映射的inverse是false的,不行吗?
|
|
返回顶楼 | |
发表时间:2007-07-10
你觉得这样领域建模是最优的吗,能否换成另外一种方式?OO很多时候不是目的。
小心Hibernate做这种复杂的集合映射时,用得不妥,会遇到严重的性能问题。 如果你愿意使用原生sql方式,也不失为一种解决方案。 我觉得,在企业应用里面,没有太大的必要去较真,如果你真的想通过纯技术方式去解决这个问题,hernate的source code也许是最好的文档。 |
|
返回顶楼 | |
发表时间:2007-07-10
zwchen 写道 你觉得这样领域建模是最优的吗,能否换成另外一种方式?
不敢说这一种是最优的,但是业务上的需求就是这样的。 |
|
返回顶楼 | |
发表时间:2007-07-10
“那这样的话最终save对象alarmInfo就会产生共享参照,即alarmInfo对auditInfos的参照,alarmInfo的子集合alarmInfos中的一个元素对auditInfos的参照。”
按照你的说法,父alarmInfo和一个alarmInfo之间的关系 与 子alarmInfo和这个alarmInfo之间的关系是分别保存的,这会有什么矛盾吗?不过这种方法数据量会增加一些,并且维护关系麻烦一些。 |
|
返回顶楼 | |
发表时间:2007-07-10
xianyun 写道:
“那这样的话最终save对象alarmInfo就会产生共享参照,即alarmInfo对auditInfos的参照,alarmInfo的子集合alarmInfos中的一个元素对auditInfos的参照。”
按照你的说法,父alarmInfo和一个alarmInfo之间的关系 与 子alarmInfo和这个alarmInfo之间的关系是分别保存的,这会有什么矛盾吗?不过这种方法数据量会增加一些,并且维护关系麻烦一些。 你没有明白我的意思,我的意思是alarmInfo对auditInfos的引用,和alarmInfo的子对象集合的其中一个元素对auditInfos的引用,这两个引用是相同的,当保存alarmInfo的时候,然后出现问题。 |
|
返回顶楼 | |
发表时间:2007-07-10
chillwarmoon 写道: 你没有明白我的意思,我的意思是alarmInfo对auditInfos的引用,和alarmInfo的子对象集合的其中一个元素对auditInfos的引用,这两个引用是相同的,当保存alarmInfo的时候,然后出现问题。
|
|
返回顶楼 | |
发表时间:2007-07-10
抽取的是集合中的detached object,所以说还是引用的同样的对象。
|
|
返回顶楼 | |
发表时间:2007-07-10
chillwarmoon 写道 抽取的是集合中的detached object,所以说还是引用的同样的对象。
不同集合中引用同一个对象是没有问题的。但是集合是不同的集合。 hibernate返回的集合不是普通的java.util中的集合,它包含了session和所属关联父对象的信息,你不能把它直接赋给另一个对象。 |
|
返回顶楼 | |