【发布时间】:2013-12-20 14:03:00
【问题描述】:
我有一个类似的查询:
Select * FROM table1 WHERE name LIKE 's%';
我不希望这个查询从数据库中获取数据;相反,它应该从休眠会话或其他东西返回数据。我认为启用二级缓存会有所帮助,但不确定它是否有助于过滤查询。
如何强制查询不从数据库中获取数据?
【问题讨论】:
标签: java database hibernate caching ehcache
我有一个类似的查询:
Select * FROM table1 WHERE name LIKE 's%';
我不希望这个查询从数据库中获取数据;相反,它应该从休眠会话或其他东西返回数据。我认为启用二级缓存会有所帮助,但不确定它是否有助于过滤查询。
如何强制查询不从数据库中获取数据?
【问题讨论】:
标签: java database hibernate caching ehcache
Hibernate 一级缓存是 Session 级缓存,所以如果对象当前在 Hibernate 会话中,就会从中获取结果。
二级缓存是一个SessionFactory级别的缓存,所以结果会被缓存给任何用户。
据我了解,您需要针对特定查询进行缓存。 Hibernate 也有这个功能。 org.hibernate.Query.setCacheable(true)可以在这里使用。
来自文档
为特定查询启用结果缓存
由于大多数查询不 从他们的结果缓存中受益,您需要启用缓存 单个查询,即使在整体启用查询缓存之后也是如此。到 为特定查询启用结果缓存,调用 org.hibernate.Query.setCacheable(true)。此调用允许查询 查找现有缓存结果或将其结果添加到缓存中 它被执行了。
另请参阅
【讨论】:
session.load() 方法将首先检查会话级缓存中的实体。如果找到,则实体将从缓存中返回,否则它将查询数据库并将其返回给客户端。但是session.get()方法每次都会直接从数据库中获取。
【讨论】: