查询Hibernate Cache而不是数据库

时间:2013-12-04 07:19:45

标签: java database hibernate caching ehcache

我有一个类似的查询:

Select * FROM table1 WHERE name LIKE 's%';

我不希望此查询从数据库中获取数据;相反,它应该从休眠会话或其他东西返回数据。我认为启用二级缓存会有所帮助,但不确定它是否有助于过滤查询。

如何强制查询不从数据库中获取数据?

2 个答案:

答案 0 :(得分:3)

Hibernate第一级缓存是会话级缓存,所以如果对象当前在Hibernate会话中,则会从中获取结果。

二级缓存是一个SessionFactory级缓存,因此可以为任何用户缓存结果填充。

据我所知,您需要缓存特定查询。 Hibernate也有这个功能。 org.hibernate.Query.setCacheable(true)可以在这里使用。

来自文档

  

为特定查询启用结果缓存

     

由于大多数查询都没有   通过缓存其结果,您需要启用缓存   个别查询,启用查询缓存后的整体效果。至   为特定查询启用结果缓存,调用   org.hibernate.Query.setCacheable(真)。此调用允许查询   查找现有缓存结果或将其结果添加到缓存中   它被执行了。

另见

Hibernate Caching

答案 1 :(得分:0)

session.load()方法将首先检查会话级缓存中的实体。如果找到,则实体将从缓存中返回,否则它将查询数据库并将其返回给客户端。但session.get()方法每次都会直接从数据库中获取。