Hibernate:是否可以手动将对象添加到二级缓存?

时间:2015-02-16 12:10:19

标签: java hibernate caching jpa second-level-cache

在我的项目中,我想缓存一些对象,但不是整个表。所以我的问题是,是否有一个API可以用来手动添加对象来休眠二级缓存? (或者有没有办法为二级缓存指定表数据区域?)

1 个答案:

答案 0 :(得分:3)

您可以使用@Cacheable(true)要缓存的实体进行注释

@Cacheable(true)
@Entity
public class Person { ... }

然后在您的persistence.xml配置文件中,您需要将[shared-cache-mode][2]元素设置为使用ENABLE_SELECTIVE

<shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>

所以现在:

  

为所有实体启用缓存,指定Cacheable(true)。   所有其他实体都不会被缓存。

要指定区域,您可以使用特定于Hibernate的@Cache注释:

@Cacheable(true)
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="your-entity-region")
@Entity
public class Person { ... }

现在你必须启用二级缓存:

<prop key="hibernate.cache.use_second_level_cache">true</prop>
<property name="hibernate.cache.region.factory_class">
org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

要将实体添加到二级缓存,只需加载实体(它将自动缓存):

Person person = entityManager.find(Person.class, 1L);