我遇到一种情况,我需要将分离的对象重新附加到hibernate会话,尽管会话中可能已经存在相同标识的对象,这将导致错误。
现在,我可以做两件事之一。
getHibernateTemplate().update( obj )
getHibernateTemplate().merge( obj )
在这两种情况下,如何将会话附加到对象上?我不想使用异常来控制此问题的解决方案的流程,因为必须有一个更优雅的解决方案…
因此,似乎没有办法在JPA中重新附加陈旧的独立实体。
merge()会将过时的状态推送到数据库,并覆盖所有中间更新。
merge()
refresh() 不能在独立实体上调用。
refresh()
lock() 无法在分离的实体上调用,即使可以,也确实将其重新连接,并使用参数LockMode.NONE调用“ lock”,这意味着你正在锁定而不是锁定是API设计中最违反直觉的部分我见过的。
所以你被困住了。有一种detach()方法,但是没有attach()或reattach()。你无法使用对象生命周期中一个明显的步骤。
detach()
attach()
reattach()
从有关JPA的类似问题的数量来看,即使JPA确实声称拥有一个连贯的模型,但它肯定与大多数程序员的思维模型不符,大多数程序员被诅咒浪费了很多时间试图理解如何获得JPA做最简单的事情,并最终在整个应用程序中使用缓存管理代码。
似乎唯一的方法是丢弃陈旧的分离实体,并执行具有相同ID的查找查询,这将影响L2或DB。