如果我有一个查询在单个线程中被多次调用,并且我只想为该线程(或为该会话缓存该查询(及其结果),因为我每个线程使用一个会话),该怎么办?我这样做?
注意:我的二级缓存已打开,但主要用于 session.get(...)。但我不想将它用于我的查询缓存,因为我只需要它在我的线程( / session )期间存在。
Thanks
这里的底线是:您可以手动缓存查询结果,也可以要求 Hibernate 来执行此操作。虽然将查询缓存生存期限制为会话的生存期通常没有什么意义,但可以使用以下方法来完成:
1) 启用查询缓存 https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch20.html#performance-querycache
2) 为相关查询指定一个特定区域并将其标记为可缓存:
Query query = ...;
query.setCacheable(true).setCacheRegion("MY_SPECIAL_QUERY");
3)在会话结束时从缓存中逐出您的查询(如果您REALLY确保这就是您想要做的):
SessionFactory sessionFactory = ...;
sessionFactory.evictQueries("MY_SPECIAL_QUERY");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)