0

在我们的网站上,我们有两个针对同一个表的操作,一个是读取多行,另一个是删除一行。

我们使用的是 Spring 3.1 和 Hibernate 3.6。

确切的操作是

EntityManager.createQuery().getResultList();

EntityManager.remove();

我们在 remove() 线程上得到了 StaleObjectStateException,而不是在 getResultList() 线程上。问题是,为什么读取会导致 StaleObjectException?

4

2 回答 2

0

就像 Pace 所说的那样,您可能正在修改使用该查询检索到的一些实例,而该实例仍然附加,这意味着在附加实例中的 persistenceContext(EntityManager 的“实例”)之前提交事务。

另一个可能的事情是您正在覆盖版本属性的值,因此 entityManager 不仅将实例/实体标记为已修改,而且还使用较低/未预期的版本值执行更新查询。

问候

于 2012-11-15T23:14:24.153 回答
0

事实证明,这个问题的根本原因与 Hibernate 或 Spring 完全无关,它是一个 HTML/Javascript 问题,导致每次单击相关链接时都会发送两个单独的 HTTP 请求。(这两个请求都是编辑,所以这是冲突的根源。)

只是把这个答案放在这里,这样人们就会知道 Spring 和 Hibernate 确实有效。

于 2012-11-17T19:08:13.180 回答