为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2019-10-15 10:04:05
我遇到一种情况,我需要将分离的对象重新附加到休眠会话,尽管会话中可能已经存在相同标识的对象,这将导致错误。现在,我可以做两件事之一。getHibernateTemplate().update( obj ) 当且仅当休眠会话中不存在对象时,此方法才有效。当以后需要时,会抛出异常,说明会话中已经存在具有给定标识符的对象。getHibernateTemplate().merge( obj ) 仅当休眠会话中存在对象时,此方法才有效。如果我以后使用该对象,则当我需要该对象进入会话时,将引发异常。在这两种情况下,如何将会话附加到对象上?我不想使用异常来控制此问题的解决方案的流程,因为必须有一个更优雅的解决方案...
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

如果您确定您的实体尚未被修改(或者如果您同意任何修改将丢失),则可以使用锁定将其重新连接到会话。


session.lock(entity, LockMode.NONE);

它不会锁定任何内容,但是会从会话缓存中获取实体,或者(如果未在其中找到)从数据库读取实体。


当您从“旧”(例如HttpSession)实体导航关系时,防止LazyInitException非常有用。您首先要“重新附加”实体。


使用get也可能会起作用,除非您继承映射时(继承已在getId()上引发异常)。


entity = session.get(entity.getClass(), entity.getId());


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 620 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信