【问题标题】:Hiber cache : Cache all fixed data permanentlyHiber 缓存:永久缓存所有固定数据
【发布时间】:2011-04-22 07:17:16
【问题描述】:

我有几个表,比如 Country,state city,它有静态数据。用户不要在此数据中输入任何数据。我为 Country、State、City 创建 pojo。很少有 pojo 与静态数据进行映射。我的要求是,每当对 Country (21) 的 Hibernate 发出任何请求时,它都不会命中数据库,而是从缓存返回数据。这在 Hibernate 中是否可能。我需要一些指针和您的观点来在我的项目中实现缓存。我正在使用休眠注释。

【问题讨论】:

    标签: java hibernate orm caching annotations


    【解决方案1】:

    我的要求是,每当有任何请求到达 Hibernate for Country (21) 时,它都不会命中数据库,而是从缓存中返回数据。这在 Hibernate 中是否可能。

    是的,使用二级缓存可以做到这一点,并且这种实体(只读)是缓存的完美候选者(它们最容易管理)。您需要:

    • 启用二级缓存
      • 在您的配置中将hibernate.cache.use_second_level_cache 属性设置为true
    • 选择二级缓存提供者(我建议EHCache)
      • 相应地设置hibernate.cache.provider_class 属性
    • 将您的实体标记为可缓存(使用read-only 策略)
      • @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) 添加到您的实体

    参考文献

    更多资源

    【讨论】:

    • 当我运行查询 select * from country 其中 countryname like '%somename%' 我可以在我的控制台中看到查询。我启用了查询缓存,但不知何故它不起作用。我可以强制休眠在启动时获取所有可缓存的数据并且不再与数据库通信。
    • @dmay 我不确定 L2/查询缓存是否适用于类似查询。但是为了回答您的问题,我的回答中描述了 Hibernate 提供的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2019-11-03
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多