强制Hibernate查询访问数据库

tob*_*yer 10 java orm hibernate hql

我已将实体加载到我的事务中并更改了该实体的属性.该交易尚未提交.现在我想获得已更改属性的原始值.

我已尝试使用HQL查询,例如select p.property from Person p where p.id = 1事务中加载的实体的ID.

query.setHint("org.hibernate.cacheMode", CacheMode.IGNORE);在执行查询之前设置了.但没有成功.Hibernate返回当前事务中设置的值,而不是数据库中的值.

有没有办法解决?

Pas*_*ent 11

我已将实体加载到我的事务中并更改了该实体的属性.该交易尚未提交.现在我想获得已更改属性的原始值.

简而言之:自己追踪旧价值.

我尝试过一个HQL查询,例如从Person p中选择p.property,其中p.id = 1,其中包含事务中加载的实体的ID.

Hibernate将实体的唯一版本加载到给定数据库标识符的会话(第一级缓存)中.这不行.

我设置了query.setHint("org.hibernate.cacheMode",CacheMode.IGNORE); 在执行查询之前.

此提示用于影响查询缓存(依赖于二级缓存),这不会影响您当前的"问题".

有没有办法解决?

  • 使用session.refresh()强迫你的实体的重载(你会松散的变化)
  • 存储最初提到的先前值.
  • 调用在另一个事务中执行查询的服务.


小智 6

StatelessSession为我工作.

StatelessSession statelessSession = sessionFactory.openStatelessSession();
try {
    return statelessSession.get(Ticket.class, ticketKey, LockMode.READ)
} finally {
   statelessSession.close()
} 
Run Code Online (Sandbox Code Playgroud)