【Hibernate】Illegal attempt to associate a collection with two open sessions

今天在用Hibernate对对象进行修改操作的时候报了这个错。

之前一直没什么错误,但是今天修改了一下表结构,增加了一个OneToMany的映射。

所以在我获取对象,重新set一个变量之后就报了这个错误了。

Illegal attempt to associate a collection with two open sessions; nested exception is org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions

网上查了一下,说是不同session直接对象的操作造成的,原因还有待查明。

目前暂时采用了下面的方法

在修改完对象值之后,给对象的OneToMany的List设置null值就可以了。

Dao<Resources> resourcesDao=TitanContext.getDaoProxy(Resources.class);
Resources resource = resourcesDao.find(id);
resource.setClickCount(resource.getClickCount()+1);
resource.setResourcePeriod(null);
resourcesDao.update(resource);

先做下备注。

时间: 2024-11-08 21:11:20

【Hibernate】Illegal attempt to associate a collection with two open sessions的相关文章

同时操作两个数据库:报错Illegal attempt to associate a collection with two open sessions

今天我在一个操作两个数据库的SSH里 同时插入1条数据 报错 Illegal attempt to associate a collection with two open sessions 在这里有答案:http://fuaotech.iteye.com/blog/1298826 使用hibenate的merge方法代替save.update等方法. merge和saveOrUpdate方法区别在于:merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查

这篇文章有很多槽点,在Hibernate4.x上面用着Hibernate3.x的写法去写.而且程序中放到Eclipse中会有一大堆警告,但是这好歹也在一定程度上完成了Hibernate的入门.毕竟现在很多介绍Hibernate的书籍都是用Hibernate3.x的写法去写.上次那篇<[Hibernate]最简单的Hibernate工程--账号注册系统>(点击打开链接)杂糅Struts的技术其实是不对的.因为Hibernate完成的是,从Java到数据库,从数据库到Java的任务.之后Java与

【hibernate】与触发器一起运行

触发器的事件 1.插入事件 2.更新事件 3.删除事件 数据库触发器经常用来生成审计日志,对重要数据的更新记录事件,这种记录审计日志的办法简便,有很好的性能,缺点是不支持跨数据库平台. 触发器引起的问题及解决方法 问题: 触发器执行的操作对Session来说是透明的,如果触发器修改了对象的属性,Session无法检测到数据库中数据的变化,因此Session不会自动刷新缓存中的对象. 解决办法: 执行完save方法后,例如User对象u1: session.save(u1); session.fl

【Hibernate】Hibernate的多表查询

在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的查询,同一时候指出hql能代替sql语句做不论什么事情.我原本以为hql语句的多表查询,要先对里面的实体做Java与xml的改动,事实上并不须要,相同是一句HQL语句就能搞定的事情.SQL的多表查询已经在<[Mysql]利用内连接与嵌套查询实现多表查询.主键.外键的基本概念>(点击打开链接)讲过.

【hibernate】Hibernate面试问题集锦: 概述

Q.怎么配置Hibernate? A.Configuration类使用配置hibernate.cfg.xml(或者hibernate.properties)以及映射文件*.hbm.xml来创建(例如,配置和引导hibernate)SessionFactory,然后SessionFactory创建Session的实例.Session的实例是持久层服务对外提供的主要接口. hibernate.cfg.xml(或者你也可以使用hibernate.properties):这两个文件都是用来配置hiber

解决org.hibernate.QueryException illegal attempt to dereference collection 异常错误

在项目中,会遇到一对多的实体关系映射,而恰恰又要查出关联的实体属性,在HQL中使用join语句关联两个实体对象,如下代码: 1 select new CustomerRequirement(c.pName,c.salesMan,c.pDate) from CustomerRequirement c inner join c.requirementDeatils r on c = c.requirementDeatils.customerRequirement 运行发现报如下错误: org.hib

【Hibernate】Hibernate的聚类查询、分组查询、排序与时间之差

在Hibernate中的HQL语句其实能够基本能够实现SQL语句所做的事情,正如jQuery至于javascript一样.虽然HQL语句是对类的查询,但是HQL在实行聚类查询.分组查询.排序与时间之差等查询,也无须把查询结果查询出来,再通过对List的处理才得到结果. 比如有一张如下的Testtable表: 要像<[Mysql]求出离最近相差X天的项,sql语句关于日期的比对>(点击打开链接)一样,查询date字段离现在具有30年的项有多少,SQL语句则这样写: select count(*)

【Hibernate】Hibernate的层次划分,Hibernate4.3的初始化的新写法

在<[Hibernate]Hibernate的在Eclipse+Mysql的配置.安装,纯Java,利用Annotation与HQL完成数据库的增删改查>(点击打开链接)介绍了Hibernate的配置与基本结构,其作用就是数据库与Java文件的交互媒介.但是,上文的程序写得非常乱,也用很多Hibernate3的过时写法.主要是没有划分好层次所致.其实,虽然Hibernate的初始化越搞越复杂,首先要载入配置文件.建立一个Session的抽象工厂.最后则根据Session工厂建立Session,

【Hibernate】---【注解】多对多

一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"