为jpa实体配置ehcache.xml或使用注释?

时间:2009-12-03 04:50:39

标签: java hibernate orm ehcache second-level-cache

使用ehcache而不是定义类似

的语句
 <cache name="testonly.package.model.TestPOJOcategory"
        maxElementsInMemory="200"
        eternal="true"
        overflowToDisk="false"
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"
    />

可以直接定义内部实体,与我们使用的任何缓存提供程序无关吗?

@Cache(
  type=CacheType.SOFT, 
  size=64000 
  expiry=36000000,  
  coordinationType=CacheCoordinationType.INVALIDATE_CHANGED_OBJECTS 
)

参考:http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching(它只显示EclipseLink,而不是ehcache)

2 个答案:

答案 0 :(得分:4)

首先,即使大多数JPA持久性提供程序(如Hibernate,EclipseLink,...)提供对二级缓存的支持,JPA 1.0仍然指定对二级缓存的支持。因此,在使用L2缓存时,您实际上正在使用非标准的JPA扩展,并且无法从一个提供程序移植到另一个提供程序。 Hibernate的@Cache注释与EclipseLink的@Cache注释不同,并且与OpenJPA的@DataCache注释不具有可比性。所有这些都是不同的,它们是专有的。如果您正在使用Hibernate(这是我对您之前的问题的理解),您不应该查看EclipseLink专有的东西(或者仅针对您的文化,但如果可能的话,这个问题超出了文化范围。)

第二,是什么让你认为EclipseLink的@Cache注释与EHCache有关? AFAIK,EclipseLink使用自己的cache implementation,它与EHCache无关。

实际上,我觉得你在这里有点迷失。你可能应该放慢脚步,一步一步地做事:选择一个解决方案,坚持下去,确定你必须做什么,逐个实现,然后让整个事情发挥作用。专注于你的目标,暂时停止收集更多信息,花一些时间来消化你所学到的新东西。

答案 1 :(得分:2)

据我所知,在Hibernate中我们有类似的东西,

@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class TestPOJOcategory {
...
}

annotation还有两个属性,regioninclude。设置大小,到期和所有这些事情,我什么都不知道。我相信你应该考虑EhCache的文档。