我有一个类似的查询:
Select * FROM table1 WHERE name LIKE 's%';
我不希望此查询从数据库中获取数据;相反,它应该从休眠会话或其他东西返回数据。我认为启用二级缓存会有所帮助,但不确定它是否有助于过滤查询。
如何强制查询不从数据库中获取数据?
答案 0 :(得分:3)
Hibernate第一级缓存是会话级缓存,所以如果对象当前在Hibernate会话中,则会从中获取结果。
二级缓存是一个SessionFactory级缓存,因此可以为任何用户缓存结果填充。
据我所知,您需要缓存特定查询。 Hibernate也有这个功能。 org.hibernate.Query.setCacheable(true)
可以在这里使用。
来自文档
为特定查询启用结果缓存
由于大多数查询都没有 通过缓存其结果,您需要启用缓存 个别查询,启用查询缓存后的整体效果。至 为特定查询启用结果缓存,调用 org.hibernate.Query.setCacheable(真)。此调用允许查询 查找现有缓存结果或将其结果添加到缓存中 它被执行了。
另见
答案 1 :(得分:0)
session.load()
方法将首先检查会话级缓存中的实体。如果找到,则实体将从缓存中返回,否则它将查询数据库并将其返回给客户端。但session.get()
方法每次都会直接从数据库中获取。