在hibernate中配置共享缓存模式

Posted

技术标签:

【中文标题】在hibernate中配置共享缓存模式【英文标题】:Configure shared cache mode in hibernate 【发布时间】:2015-06-25 04:45:27 【问题描述】:

我正在使用 spring - hibernate 集成,并且我有 hibernate.cfg.xml,它在 xml 中有 session-factory 节点。

在带有 jpa 的 persistense.xml 中,我使用 shred-cache-mode 进行二级缓存。

我想使用 hibernate 配置文件进行相同的配置以使其成为 ENABLE_SELECTIVE,但似乎不可能。

【问题讨论】:

据我记得,如果使用纯 Hibernate,默认行为是只缓存那些带有@Cacheable 的实体/集合。你到底有什么问题? 我一直在寻找我想有选择地启用缓存。是否可以从休眠配置文件配置其他模式? AFAIK,重申一下,我认为 Hibernate 在运行 Hibernate 本机时已经有选择地启用了开箱即用的缓存。我不知道 hibernate.cfg.xml 中的任何其他选项 【参考方案1】:

我也不确定,但我也假设 ENABLE_SELECTIVE 已经是默认设置,因为使用@Cacheable 你会以某种方式选择性地激活它。

但是,根据Spring Boot + JPA2 + Hibernate - enable second level cache 上的答案使用spring boot,您似乎可以使用application.properties(spring boot 的配置文件)通过如下条目影响缓存模式:

spring.jpa.properties.javax.persistence.sharedCache.mode=ENABLE_SELECTIVE

也许您可以将其转移到 XML 世界中,并在您的 JPA spring 配置 XML 文件中使用这样的属性:

<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="packagesToScan" value="com.example.persistence.model" />
      <property name="jpaVendorAdapter">
         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
      </property>
      <property name="jpaProperties">
         <props>
            <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.mysql5Dialect</prop>
            <prop key="javax.persistence.sharedCache.mode">ENABLE_SELECTIVE</prop>
         </props>
      </property>
</bean>

我还没有测试过,但 IMO 这是正确的方法。

【讨论】:

以上是关于在hibernate中配置共享缓存模式的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate二级缓存配置

Hibernate二级缓存配置

HIbernate二级缓存

Hibernate缓存何时使用和如何使用

Share Hibernate Second-Level Cache - 多个应用程序可以共享同一个缓存吗

共享 nHibernate 和 hibernate 二级缓存