当前位置:  开发笔记 > 编程语言 > 正文

非法尝试将集合与两个打开的会话相关联

如何解决《非法尝试将集合与两个打开的会话相关联》经验,为你挑选了1个好方法。

我正在尝试为另一个pojo中的集合添加一个pojo.我确定我在某个地方犯了一个非常愚蠢的错误,但我无法弄清楚如何解决它.

我有一个pojo LookupTable,它包含一个列列表:

public class LookupTable {
  private long id;
  // More properties go here...
  private List columns;

  public void addColumn(Column column) {
    this.columns.add(column);
  }

  // More methods go here...
}

在我的休眠配置中,我有:


  
    
  
  
  
    
    
  



  
    
  
  

在我的Spring配置文件中,我有:


  
    
  


  
  

最后在我的经理类(com.foo.LookupTableManager)中失败的代码:

public void addColumnToTable(Column column, long tableId) {
  LookupTable lookupTable = this.lookupTableDao.findById(tableId);
  lookupTable.addColumn(column);
  this.lookupTableDao.saveOrUpdate(lookupTable);
}

这里的变量lookupTableDao引用了一个扩展HibernateDaoSupport的简单DAO类.

我得到的错误是:

org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
  at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:410)
  at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:43)
  at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
  at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61)
  at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
  at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:123)
  at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:293)
  at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
  at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
  at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
  at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
  at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
  at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
  at com.foo.AbstractDao.saveOrUpdate(AbstractDao.java:29)
  at com.foo.LookupTableManager.addColumnToTable(LookupTableManager.java:338)
... etc ...

好的,我理解我得到的基本信息.但是我不明白的是我第二次参加的会议....有人可以帮助我吗?

我正在使用Hibernate 3.2.6.ga,Spring 2.5.5和Tomcat 6.0



1> Jaap Coomans..:

结果我根本没有交易.我在其他一个配置文件中使用了几乎相同的事务配置.

那里的切入点也被称为"经理",所以我的顾问在这里引用了另一个文件中的切入点.

重命名切入点解决了我的问题.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有