我通过在地图中存储(可能是分离的)对象来维护hibernate会话中的对象缓存。当缓存命中时,我测试该对象是否已经是Session.contains(object)
会话的一部分。如果没有,我会将其重新附加Session.lock(object, LockMode.NONE)
。
问题是,如果先前在会话中加载了相同的对象,则会抛出org.hibernate.NonUniqueObjectException。给定一个分离的实例,我认为没有办法提前找出是否会抛出此异常,而不会触及数据库。
有几种解决方法:
这些都不像预先检查对象类+ id的会话一样干净。
有没有办法做到这一点?
答案 0 :(得分:4)
Session.merge()应该这样做:
obj = session.merge(obj);
答案 1 :(得分:0)
我在hibernate会话中维护对象缓存
不是直接回答,但为什么不使用Hibernate L2缓存而不是重新发明轮子?