Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1938343
  • 博文数量: 606
  • 博客积分: 9991
  • 博客等级: 中将
  • 技术积分: 5725
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-17 19:07
文章分类

全部博文(606)

文章存档

2011年(10)

2010年(67)

2009年(155)

2008年(386)

分类:

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状态呢,这样就可以避免对集合的共享参照问题。或者还有其他的方法。

java 代码
 
  1. public class AlarmInfo{  
  2. private Set alarmInfos;  
  3. private Set auditInfos;  
  4. private AlarmCompress alarmCompress;  
  5. }  
  6.   
  7. public class  AuditInfo{  
  8. private Set alarmInfos;  
  9. }  
  10.   
  11. public class AlarmCompress{  
  12. private Set alarmInfos;  
  13. }  
阅读(976) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~