在Hibernate中重新附加分离的对象的正确方法是什么?

问题:

我有一种情况,我需要将分离的对象重新附加到休眠会话,尽管同一个身份的对象可能已经存在于会话中,这将导致错误。
现在,我可以做两件事之一。

  1.  getHibernateTemplate().update( obj )
    当且仅当对象在hibernate会话中不存在时,这才有效。在稍后需要时,在会话中已经存在给定标识符的对象被抛出。
  2.  getHibernateTemplate().merge( obj )
    当且仅当在hibernate会话中存在对象时,这才有效。当我需要对象在一个会话中,如果我使用这个,会抛出异常。

考虑到这两种情况,我如何可以将会话一般性地附加到对象上?我不想使用异常来控制这个问题的解决方案的流程,因为必须有一个更优雅的解决方案…

回答:

所以似乎没有办法在JPA中重新连接一个陈旧的独立实体。
 merge()将把陈旧的状态推到DB,
并覆盖任何介入的更新。
 不能在分离的实体上调用refresh()
 不能在分离的实体上调用lock()
即使可以,而且它重新连接实体,
用参数’LockMode.NONE’调用’lock’
意味着你是锁定的,但是没有锁定,
是我见过的最直观的API设计。
所以你被卡住了
有一种detach()方法,但没有attach()reattach()
对象生命周期中的一个明显步骤不可用。
根据关于JPA的类似问题的数量,
似乎即使JPA声称拥有一致的模式,
它绝对不符合大多数程序员的心理模式,
谁被诅咒浪费了很多小时,明白了
如何让JPA做最简单的事情,最终得到缓存
管理代码遍及其应用程序。
看来,唯一的办法就是丢弃你陈旧的独立实体
并找到具有相同ID的查询查询,这将打到L2或DB。
MIK

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the proper way to re-attach detached objects in Hibernate?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

83 + = 87