我有一个奇怪的Hibernate用例,在一个大堆栈的调用中需要一个未修改的对象副本,这是一个hibernate事务的一部分。但是,每次我向Hibernate询问该对象的副本时,它都会返回已经修改过的版本/是该事务的一部分。
我有办法强制Hibernate返回有问题的对象的db copy / uncached版本吗?
答案 0 :(得分:3)
打开一个新的Session
并从新Session
获取该对象的副本。
答案 1 :(得分:3)
Session#refresh(Object object);
从底层数据库重新读取给定实例的状态。
或者您可以调用session.evict(obj)
(将其从会话缓存中删除)并重新load()
。
请注意,如果您使用EntityManager
代替Session
,则不会使用evict()
方法。您可以通过以下方式获取Session
:
Session session = (Session) entityManager.getDelegate();
答案 2 :(得分:0)
如果您不关心hibernate缓存,请使用无状态会话来执行查询。 Google Hibernate无状态会话获取详细信息。