我正在为我的Web应用程序使用Hibernate和Spring。
在数据库操作中,Hibernate缓存实体并在下一个请求中返回它们,而不读取实际的数据库。我知道这将减少数据库的负载并提高性能。
但当这个应用程序仍在建设中,我需要在每个请求(测试原因)从数据库加载数据。
有没有办法强制读取数据库?
我从这条log4j消息中确定了缓存。
Returning cached instance of singleton bean 'HelloController'
DEBUG [http-bio-8080-exec-42] - Last-Modified value for [/myApp/../somePageId.html] is: -1
5条答案
按热度按时间kadbb4591#
session.refresh(entity)
或entityManager.refresh(entity)
(如果您使用JPA)将为您提供来自数据库的新数据。lnlaulya2#
在新事务内执行读取。
例如:
kkbh8khc3#
session.refresh(entity)
或者
session2.get(EntityClass.class,id)
,它将从数据库中拉出实体4bbkushb4#
请调用EntityManger.lear()方法,然后根据需要调用repository.findOne()或repository.findOne()从数据库中选择更新的数据。
ecfsfe2w5#
您可以使用计数器来确保缓存未命中。“计数器”可以是任何唯一的值生成器,例如文字计数器、时间参数甚至UUID。预计负条件为真。
例如:
呼叫示例