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