如何在使用Hibernate模板查询数据库的EJB Bean中设置缓存?

3

我正在从我的EJB Bean中查询数据库,这是DAO(数据访问对象),我的查询看起来像:

public List findDirectories()
{
  allDirectories = getHibernateTemplate().find("from " + Directory.class.getName() +
        " d order by upper(d.name)";);
  return allDirectories;
}

我想要缓存这些结果,我该怎么做?有没有示例可以参考?

我只是想在我的EBJ Bean中缓存上述查询的结果,这样下次刷新页面时,我就可以从缓存中获取结果,而不是从数据库中获取。

更新:我正在使用较旧版本的EJB,因此可以使用EJB3cool features


你能使用Hibernate的二级缓存吗?它还包括一个查询缓存。 - Luciano
我正在使用Hibernate缓存,目前只是使用静态映射使其充当缓存... - Rachel
1个回答

3

我没有使用ejb3,所以不确定我是否可以使用这种方法。 - Rachel
我已经将近十年没有使用过"传统的" EJBs,但我相当确定在无状态会话 EJBs 中缓存数据的方法和 EJB 平台一样古老。 - Olaf
我正在使用无状态会话Bean进行实现,但不确定缓存如何在这里工作,因为我正在使用Hibernate查询从数据库中获取数据。 - Rachel
@Rachel:我不确定你的具体架构是什么。 它像这样吗:http://static.springsource.org/spring/docs/2.5.x/reference/ejb.html? 如果是这样,您应该在无状态会话bean的setSessionContext()方法中拥有足够的设施来运行Hibernate查询。 因此,您可以获取所有值并将它们存储在List类型的成员变量中。 您可以存储已与Hibernate会话分离的对象,或者只是稍后可用于UI或构建过滤条件的Java字符串。 希望这可以帮助您。 - Olaf
暂时来说,我刚刚创建了一个映射,并且正在将信息存储在映射中。我会检查这个映射是否为空,如果不为空,就从映射中获取值;否则,就从数据库中获取值。在这种情况下,应用程序可能需要一些时间。 - Rachel
@Olaf,您提供的链接已经失效,请更新链接。 - srh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接