Illegal attempt to associate a collection with two open sessions

xiaops2005 2008-11-06 09:23:38
代码:
		ArticleInfo articleInfo = articleInfoManager.findUniqueBy("id",id);
articleInfo.setLastReplyTime(dDate);
articleInfo.setLastReplyUser(user);
articleInfo.setReplyTimes(articleInfo.getReplyTimes() + 1);

Article article = new Article();
article.setContent(content);
article.setPostTime(dDate);
article.setUser(user);
article.setArticleInfo(articleInfo);
articleManager.save(article);
articleManager.flush();

红色字体那行报错,求解。
...全文
1776 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
freesone 2009-11-20
  • 打赏
  • 举报
回复
illegal attempt to associate a collection with two open sessions

考虑一下这个方法 merge
lengyuehanchang 2009-08-11
  • 打赏
  • 举报
回复
更新的时候用 merge()方法,不用update()方法,我遇到了,也解决了,不知道是什么回事,呵呵
mayanyun1986 2009-05-26
  • 打赏
  • 举报
回复
“Illegal attempt to associate a collection with two open sessions ”是报两次打开了session,你的代码ArticleInfo articleInfo = articleInfoManager.findUniqueBy("id",id);中,findUniqueBy("id",id);方法中是否关闭了session,你试试
heavenfeng 2009-01-15
  • 打赏
  • 举报
回复
忘了件事,“Illegal attempt to associate a collection with two open sessions ”
这个是跟session有关,你的2个操作不是用的同一个session,比如使用了连接池,

只需要将dao的操作放一起就ok了,
heavenfeng 2009-01-15
  • 打赏
  • 举报
回复
article.setArticleInfo(articleInfo);
这个是不需要手动设置的,

刚碰到类似的问题,
one to many的2个表的添加记录,one这里添加1条,many这里添加n条完成一个事务,
之前写的就是手动去set() many这边外键的属性然后save() many,结果就是导致one表实际添加了2条记录(一条正确,多的一条有id其他null),
后来把这个手动set()去掉,然后ok,

对于这个结果确实从开始不好去设想到,因为先总想着save() many的时候如果不去set()外键属性那不就是null了,

从结果倒推上来的话,我觉得是hbm.xml配置的one里面的set集合和many里面的<many to one>起的作用,one中的inverse="true" 决定了有many这方来维护更新set,而many中的<many to one>能够让它自动找到并设置对应的外键属性,这是目前个人想法,
继续关注,
hl_ghost 2008-11-06
  • 打赏
  • 举报
回复
呵呵 ,我猜的,你试下
hl_ghost 2008-11-06
  • 打赏
  • 举报
回复
articleInfo 应该是持久化对象

articleManager.save(article);
又对他(articleInfo)进行了save,所以就出错了。

ArticleInfo articleInfo2=new ArticleInfo();
把articleInfo的值添到articleInfo2里
article.setArticleInfo(articleInfo2)

这样估计就可以了




xiaops2005 2008-11-06
  • 打赏
  • 举报
回复
这篇文章看过了,还是不知道怎么回事。

就是对两个表进行操作,一个表更新,一个表保存。就会报这个错。
zidasine 2008-11-06
  • 打赏
  • 举报
回复
没有上下文很难判断哪里的错误
看下这个可能能找到答案http://www.javaeye.com/post/239485
xiaops2005 2008-11-06
  • 打赏
  • 举报
回复
Illegal attempt to associate a collection with two open sessions
就是这个错。
liaoyi_ipanel 2008-11-06
  • 打赏
  • 举报
回复
报的什么错?
xiaops2005 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hl_ghost 的回复:]
articleInfo 应该是持久化对象

articleManager.save(article);
又对他(articleInfo)进行了save,所以就出错了。

ArticleInfo articleInfo2=new ArticleInfo();
把articleInfo的值添到articleInfo2里
article.setArticleInfo(articleInfo2)

这样估计就可以了



[/Quote]
这样的话就是两张表都是保存了。
我现在想保存article,更新articleinfo,而且article和articleinfo是多对一的关系。
xiaops2005 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iwtxokhtd_2008 的回复:]
在web.xml中加入
<filter>
<filter-name>Spring OpenEntityManagerInViewFilter </filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter </filter-class>
</filter>
<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
<filter>
试一下
[/Quote]
加上这一句后就出现这种错误了:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined

iwtxokhtd_2008 2008-11-06
  • 打赏
  • 举报
回复
在web.xml中加入
<filter>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
试一下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧