【问题标题】:Query Hibernate Cache instead of database查询休眠缓存而不是数据库
【发布时间】:2013-12-20 14:03:00
【问题描述】:

我有一个类似的查询:

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

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

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

【问题讨论】:

    标签: java database hibernate caching ehcache


    【解决方案1】:

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

    二级缓存是一个SessionFactory级别的缓存,所以结果会被缓存给任何用户。

    据我了解,您需要针对特定​​查询进行缓存。 Hibernate 也有这个功能。 org.hibernate.Query.setCacheable(true)可以在这里使用。

    来自文档

    为特定查询启用结果缓存

    由于大多数查询不 从他们的结果缓存中受益,您需要启用缓存 单个查询,即使在整体启用查询缓存之后也是如此。到 为特定查询启用结果缓存,调用 org.hibernate.Query.setCacheable(true)。此调用允许查询 查找现有缓存结果或将其结果添加到缓存中 它被执行了。

    另请参阅

    Hibernate Caching

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        • 2015-10-23
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多