预填充Hibernate L1缓存

时间:2012-05-30 10:03:02

标签: java hibernate caching servlets

我只使用Hibernate及其L1(会话)缓存。我想知道是否有可能预先填充它。

假设我有一个Item表,其中每个项目都有自己的id,我需要发出“from Item where id = :id”之类的查询:如果我可以预先加载所有项目我可以有更快的响应时间(我在Tomcat下使用Hibernate)。

1 个答案:

答案 0 :(得分:-1)

是的,这是可能的。您将执行一次select(没有where条件且不使用结果列表),然后数据在会话的第一级缓存中,直到您清除会话或将其丢弃。

但是在这种情况下,你无法控制会话本身是否从其缓存中丢弃预加载的数据(这不是一个功能问题,只是一个性能问题,而且我感觉我正在使用hibernate版本使用永远不会这样做)。如果要完全控制,则将预加载的数据存储在静态变量(List或Map实例)中,并编写一个服务,该服务从数据库中读取此静态变量。顺便说一句,在您的环境中,必须同步对此静态变量的访问。