以下是场景:
使用hibernate从数据库加载一个对象/实体。
在将该对象再次保存到db之前,会对其执行一些操作
我需要对象在db中的状态,也就是说,在更改对象的原始状态之前,所以我将对象从数据库再次加载到新的对象示例中。
我使用第二个加载的对象(该对象与db没有任何进一步的交互)
首先加载的对象(从步骤1)被持久化到数据库,以更新其状态,并引发此异常: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:...
我知道在同一个hibernate会话中不能使用多个实体对象。但我需要第三步的目标。只需要从数据库中检索它的当前状态,所以hibernate不需要以任何方式跟踪它,我只需要它作为pojo。有没有办法将其从会话/缓存或hibernate存储该示例的任何位置删除?
1条答案
按热度按时间swvgeqrz1#
每个entitymanager(又名persistencecontext,又名hibernatesession)都有自己的缓存。只需创建第二个实体,然后从数据库中再次加载实体,而不会干扰第一个实体。只要第一个没有同步对数据库的更改,您就会得到原始值。只需确保您知道同步(aka merge)什么时候在您的应用程序中发生。