0

可能重复:
休眠:具有相同标识符值的不同对象已与会话关联

我在我的代码(Spring + Hibernate Web 应用程序)中看到了以下异常:

 HibernateSystemException: a different object with the same identifier value was already associated with the session

我检查了我的代码并意识到问题是由于我两次获得相同的对象而引起的。我将其修改为最简单的情况:

customerDao.getById(customerId);
customerDao.getById(customerId);

上面的代码导致了提到的异常,但是我不明白为什么从 Hibernate 中获取同一个对象两次是错误的。这似乎是一个正常的用例。可以检索相同的对象,即通过运行两个不同的查询。为什么我要担心一个查询是否会返回与第二个查询相同的对象?任何人都可以解释或指出有关此主题的一些信息来源吗?

PS在应用程序中禁用了 Hibernate 二级缓存。


更新:

当我将 customerDao.getById(customerId) 的内容更改为:

Customer result = new Customer();
getHibernateTemplate().load(result, customerId);
return result;

return getHibernateTemplate().get(Customer.class, customerId);

不再抛出异常。网上有很多关于load和get的区别的文章,但是我发现没有提到这个案例。任何人都可以对这个话题有所了解吗?

4

0 回答 0