我遇到了这样的情况,我需要将分离的对象重新附加到hibernate会话,尽管会话中可能已经存在相同标识的对象,这将导致错误。
现在,我可以做两件事之一。
getHibernateTemplate()。更新(obj)
当且仅当对象在hibernate会话中还不存在时,这才有效。当我以后需要它时,抛出异常,声明具有给定标识符的对象已经存在于会话中。
getHibernateTemplate()。合并(obj)
当且仅当hibernate会话中存在对象时,此操作才有效。如果稍后使用此方法,则在需要对象处于会话中时抛出异常。
对于这两种场景,我如何将会话附加到对象?我不想使用异常来控制这个问题解决方案的流程,因为一定有更优雅的解决方案……
因此,似乎没有办法在JPA中重新附加一个过时的分离实体。
merge()会将过期状态推送到DB,
并覆盖任何中间更新。
不能在分离实体上调用Refresh()。
不能在分离实体上调用Lock (),
即使它可以,而且它确实重新连接了实体,
使用参数LockMode调用lock。没有'
这意味着你在锁定,但不是锁定,
是我见过的最违反直觉的API设计。
所以你陷入了困境。
有一个detach()方法,但没有attach()或reattach()。
对象生命周期中的一个明显步骤对您来说是不可用的。
根据关于JPA的类似问题的数量判断,
似乎即使JPA声称有一个一致的模型,
它肯定不符合大多数程序员的思维模式,
谁被诅咒浪费了很多时间试图理解
如何让JPA做最简单的事情,并以缓存结束
管理代码遍布他们的应用程序。
要做到这一点,似乎唯一的方法就是抛弃你陈旧的超然实体
并使用相同的id执行find查询,这将命中L2或DB。
Mik
因此,似乎没有办法在JPA中重新附加一个过时的分离实体。
merge()会将过期状态推送到DB,
并覆盖任何中间更新。
不能在分离实体上调用Refresh()。
不能在分离实体上调用Lock (),
即使它可以,而且它确实重新连接了实体,
使用参数LockMode调用lock。没有'
这意味着你在锁定,但不是锁定,
是我见过的最违反直觉的API设计。
所以你陷入了困境。
有一个detach()方法,但没有attach()或reattach()。
对象生命周期中的一个明显步骤对您来说是不可用的。
根据关于JPA的类似问题的数量判断,
似乎即使JPA声称有一个一致的模型,
它肯定不符合大多数程序员的思维模式,
谁被诅咒浪费了很多时间试图理解
如何让JPA做最简单的事情,并以缓存结束
管理代码遍布他们的应用程序。
要做到这一点,似乎唯一的方法就是抛弃你陈旧的超然实体
并使用相同的id执行find查询,这将命中L2或DB。
Mik