首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Hibernate数据delete时容易忽略的有关问题

2012-10-10 
Hibernate数据delete时容易忽略的问题在主线程通过hibernate的find查询到数据后,把list里数据分别加入到新

Hibernate数据delete时容易忽略的问题
在主线程通过hibernate的find查询到数据后,把list里数据分别加入到新的list中,然后给子线程处理,子线程在执行getHibernateTemplate().delete(o)的时候,就可能会出现org.hibernate.StaleStateException。

我觉得这个异常出现的原因和内存回收有关系,在内存回收的时候。在session关闭的时候,这些数据会变成游离态,如果JAVA虚拟机没有进行垃圾回收的话,在执行delete操作时是没问题的。如果内存不够,或者有频繁的其他操作影响垃圾回收了,那在执行delete操作时就会出现这个问题。

另外,如果直接通过new一个object,生成主键之类的数据,直接delete数据,基本上也会出现这个问题。

解决的方法可以是:在每次的delete之前,先根据主键进行查询操作,如果不为null,再进行delete操作。

另外,直接通过sql进行delete操作应该也可以。update,save等操作应该也是同一个问题。


另外欢迎大家提其他的解决方案。 1 楼 jinnianshilongnian 4 小时前   我觉得这个异常出现的原因和内存回收有关系,在内存回收的时候。 跟垃圾回收无关,况且你拿着这个model的引用不可能回收。

StaleStateException异常描述:
public class StaleStateException
extends HibernateException
Thrown when a version number or timestamp check failed, indicating that the Session contained stale data (when using long transactions with versioning). Also occurs if we try delete or update a row that does not exist.

Note that this exception often indicates that the user failed to specify the correct unsaved-value strategy for a class!

能否贴出详细异常,需要看一下详细异常。

热点排行