【问题标题】:hibernate and ehcache休眠和ehcache
【发布时间】:2016-04-13 16:18:47
【问题描述】:

我在我的应用程序中使用带有休眠功能的 ehcache。

我可以使用 ehcache 进行缓存,但我正在尝试实现这样的目标:

  1. 我只想缓存最初在我的应用程序中经常使用的数据库表。

  2. 缓存表后,如何在我的 hql 查询中使用它。 就像在我的 hql 查询中一样,我对各自的 db 表使用 Pojo 类名。在这种情况下,我该如何使用我的 hql 查询。

请为上述提供一些文档或支持。

【问题讨论】:

    标签: hibernate caching ehcache


    【解决方案1】:

    The documentation of ehcache explains this in detail.

    基本上,您可以使用@Cache 注解告诉Hibernate 访问缓存的类型。

    在ehcache配置中,可以为每个实体配置一个缓存;类名是关键。这允许您定义每个实体要缓存多少元素。

    如果您希望 Hibernate 缓存查询,请将属性 hibernate.cache.use_query_cache 设置为 true。然后,当您使用 HQL 时,Hibernate 将“做正确的事”。

    [编辑]

    我如何准备缓存?

    您可以尝试加载对象,以便它们在 Hibernate 需要它们进行某些查询时在缓存中。

    但是缓存是一个非常复杂的话题。有许多因素允许和阻止使用缓存。如果您只有简单的情况,缓存将“正常工作”,您无需执行任何操作。如果你有复杂的 HQL,任何事情都可能发生。我已经看到了相同查询可能需要 100 毫秒或 10 秒的示例,具体取决于 where 子句中的值。我见过缓存使整个事情变慢的代码。我见过我们从 Hibernate 会话请求底层连接并自己完成所有事情的代码,因为 Hibernate 根本不符合要求。

    通常的方法是使代码尽可能简单,然后在生产环境中运行一段时间。随着时间的推移,用户会开始抱怨速度太慢的地方。然后,您可以优化这几个地方。这样,您就不会在用户不关心的代码上浪费时间。

    【讨论】:

    • thanku Aaron Digulla....实际上我已经设置了所有这些。我可以对我的查询进行缓存。我的问题是在来查询之前假设我将在我的应用程序中使用 50 个表。我可以将所有这些表从我的服务器上的数据库(服务器端缓存)放在我的缓存中,并使用缓存版本的查询或任何东西。我怎样才能做到这一点??
    • 或者我可以将其指出为:我想缓存我将在部署时在我的应用程序中使用的所有数据库表。如何实现这一点。 ??在这种情况下,ehcache 会帮助我吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2011-07-13
    • 2017-08-12
    • 2011-07-18
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多