不能禁用 hibernate一级缓存。如果要 强制 Hibernate查询数据库,则需要了解Hibernate的会话缓存。
Lokesh Gupta在http://howtodoinjava.com/2013/07/01/understanding-hibernate-
first-level-cache-with-
example/上有很好的教程
- 一级缓存与“会话”对象关联,应用程序中的其他会话对象看不到它。
- 缓存对象的范围是会话。一旦会话关闭,缓存的对象将永远消失。
- 默认情况下,第一级缓存处于启用状态, 您不能禁用它 。
- 当我们第一次查询实体时,它是从数据库中检索出来的,并存储在与hibernate会话相关的一级缓存中。
- 如果我们使用相同的会话 对象再次查询相同的对象 , 则会从缓存中加载该 对象, 并且不会执行任何SQL查询。
- 可以使用evict()方法从会话中删除已加载的实体。
如果已使用evict()方法删除了该实体,则该实体的下一次加载将再次进行数据库调用。- 可以使用clear()方法删除整个会话缓存。它将删除所有存储在缓存中的实体。
因此,您应该使用
evict()或
clear()方法来强制查询数据库。
为了验证这一点,您可以使用
hibernate.show_sql配置属性打开SQL输出(请参阅https://docs.jboss.org/hibernate/orm/5.0/manual/en-
US/html/ch03.html#configuration-
optional) 。



