分类:
2008-07-17 22:48:36
最近的开发一直在持久层周围,虽然做hibernate也有一段时间了,但是随着数据库表的增加,遇到了一些以前没有碰到过的问题。其中有一个问题就是对集合的共享参照问题(found shared references to a collection)具体是这样的:
数据库表的关系如下:
关系是这样的ALARMINFO表通过交叉表ALARMAUDIT和AUDITINFO建立多对多关系,ALARMINFO自身是一对多的关系,ALARMINFO表和ALARMCOMPRESS表是多对一的关系。
在这里抛开ALARMCOMPRESS表不讨论,对象之间的关系是双向关联,目标是这样的:生成一个新的ALARMINFO对象alarmInfo,该对象子集合alarmInfos已经获得,将其赋值给该对象alarmInfo,而该对象的auditInfos的赋值是这样的:将alarmInfos的其中一个元素对应的多个auditInfos赋值给auditInfos。
那这样的话最终save对象alarmInfo就会产生共享参照,即alarmInfo对auditInfos的参照,alarmInfo的子集合alarmInfos中的一个元素对auditInfos的参照。
有什么方法能够在加载alarmInfos的其中一个元素的auditInfos集合,并赋值给alarmInfo后,使得该集合再次恢复到未加载前的lazy状态呢,这样就可以避免对集合的共享参照问题。或者还有其他的方法。