繁体   English   中英

Hibernate:安全地将对象重新附加到会话中

[英]Hibernate: Safely reattach an object to the session

我通过在地图中存储(可能是分离的)对象来维护hibernate会话中的对象缓存。 当缓存命中时,我测试对象是否已经是Session.contains(object)的会话的一部分。 如果没有,我用Session.lock(object, LockMode.NONE)重新附加它。

问题是,如果先前在会话中加载了相同的对象,则会抛出org.hibernate.NonUniqueObjectException。 给定一个分离的实例,我认为没有办法提前找出是否会抛出此异常,而不会触及数据库。

有几种解决方法:

  1. 在每个事务开始时重新附加所有缓存的对象。
  2. 捕获NonUniqueObjectException,然后调用session.load(object.class,object.getId());

这些都不像预先检查对象类+ id的会话一样干净。

有没有办法做到这一点?

Session.merge()应该这样做:

obj = session.merge(obj);

我在hibernate会话中维护对象的缓存

不是直接的答案,但为什么不使用Hibernate L2缓存而不是重新发明轮子?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM