Hibernate 异常:
Illegal attempt to associate a collection with two open sessions
@author:阙超强
Time:2011-12-5 17:31:57
今天在做项目发现的问题:
在做任务定时发送的时候发现此异常,于是我百度啊,找谷老师啊。
1.如以下找到的资料之一:
错误信息:
org.springframework.orm.hibernate3.HibernateSystemException: Illegal attempt to associate a collection with two open sessions;
错误原因:
1. 一个Action在两个线程中同时运行,造成并发。
解决方法:
1. 阻止重复提交。可以利用Struts Token机制。
但是还是不能解决我的问题。
2.经常debug 测试 终于发现了一个问题:
原来属性重名了
我在Action中已经注入了实体类
private Mission mission;
在下面某个内部类方法中也重名的定义
Mission mission = misList.get(0);
并且他们都被调用了同一方法
missionBussiness.addData(mis);
处理结果:改掉其中的一个属性名,错误仍然存在。
3.找到资料 :
在pring配置文件中的action bean中添加属性 scope="prototype"
问题依然存在。
4.最后终于找到一个可以解决我问题的方案:
使用hibenate的merge方法代替save、update等方法。
merge和saveOrUpdate方法区别在于:merge方法是把我们提供的对象转变为托管状态的对象;而saveOrUpdate则是把我们提供的对象变成一个持久化对象;说的通俗一点就是:saveOrUpdate后的对象会纳入session的管理,对象的状态会跟数据库同步,再次查询该对象会直接从session中取,merge后的对 象不会纳入session的管理,再次查询该对象还是会从数据库中取。所以一般建议用merge
将MissionDaoImpl类中的 this.getHibernateTemplate().save(data); save方法改为了merge方法
将此方法:public boolean addData(Object data) throws Exception {
this.getHibernateTemplate().save(data);
return true;
}
改为:
public boolean addData(Object data) throws Exception {
this.getHibernateTemplate().merge(data);
return true;
}
将MissionDaoImpl类中的 this.getHibernateTemplate().update(data); update方法改为了merge方法
将此方法:public void update(Object data) throws Exception {
super.getHibernateTemplate().update(data);
}
改为:public void update(Object data) throws Exception {
super.getHibernateTemplate().merge(data);
}
分享到:
相关推荐
java.security.InvalidKeyException: Illegal key size 解决方案
AES加密时抛出java.security.InvalidKeyException: Illegal key size or default parameter
对接微信接口中因为jdk8解密长度不够 报错 java.security.InvalidKeyException: Illegal key size 替换路径:(记得备份原有的文件) C:\Program Files\Java\jdk1.8.0_131\jre\lib\security
复制并覆盖%JAVA_HOME%/jre/lib/security下的local_policy.jar 和 US_export_policy.jar
今日遇到如下错误:java.security.InvalidKeyException: Illegal key size 因为美国法律限制,JAVA默认支持AES 128 Bit 的key, 如果你计划使用 192 Bit 或者 256 Bit key, java complier 会抛出 Illegal key size ...
为了数据代码在传输过程中的安全,很多时候我们都会将要传输的数据进行...然而,在使用256位密钥加解密的时候,如果不进行特殊处理的话,往往会出现这个异常java.security.InvalidKeyException: Illegal key size。
在调用企业微信通讯接口的时候,企业微信aes加密抛出了illegal key size异常,这个异常的原因是jdk jar包缺少lib导致的,不同jdk版本的jar包缺失不同,附件包含jdk6,jdk7,jdk8的jar包依赖,更新覆盖的时候,记得先...
java.security.InvalidKeyException:illegal Key Size 微信开发过程中,JDK6的版本
主要介绍了JQuery报错"Uncaught TypeError: Illegal invocation"的处理方法,需要的朋友可以参考下
如在加密过程中出现下面异常: java.security.InvalidKeyException:illegal Key Size 请将两个jar文件按下列操作完成: 如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件;如果安装了...
Illegal attempt to use Text/Byte host variable. 解决方法: 使用GbsConnection的方法GetGbsBlob(), GetGbsClob(), 获得Blob,Clob对象。 将Blob,Clob对象作为参数值。就能够解决该问题。
主要介绍了Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation",非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
如果执行上面代码时出现了“java.security.InvalidKeyException: Illegal key size or default parameters ”或类似的错误提示,很可能是超出了JDK 默认的秘钥长度造成的。需要在oracle官网下载local_policy.jar 、...
java.security.InvalidKeyException: Illegal key size; JDK自带的密钥库长度有限制,特殊需求,需要到官网下载 jdk 无限制权限策略文件。 查看博客:https://blog.csdn.net/dling8/article/details/84061948 Java...
'gbk' codec can't encode character '\U0001f370' in position 5: illegal multibyte sequence 去一看名字我懵逼了是个emoji???? 原来代码是这么写的 设置csv文件位UTF-8,代码改为 for i in b: persons = ...
F12看到后台报了个错误:Uncaught TypeError: Illegal invocation,百度了一下,找到了解决方法。 解决方法:在ajax请求的参数中添加如下两个参数: $.ajax({ ..., processData: false, contentType: false, .....
前言 很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段...date -j -f %a %b %d %T %Z %Y Sat Sep 29 11:33:00 CST 2018 +%s” 报错: Failed c
异常java.security.InvalidKeyException:illegal Key Size的解决方案:在官方网站下载JCE无限制权限策略文件(请到官网下载对应的版本, 例如JDK7的下载地址:... 如果安装了JRE,将两个jar文件放到%JRE_HOME% \lib\...
否则将会抛出 Illegal invocation 的异常,因为 jQuery 默认是会对传入的 data 字段的数据进行处理的。 官方文档是这么解释的: 其次,注意请求的 Content-Type 首部,默认是 application/x-www-form-urlencoded; ...