为 jpa 实体配置 ehcache.xml 还是使用注释?
-
11-09-2019 - |
题
当使用 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)
解决方案
首先,即使大多数 JPA 持久性提供程序(如 Hibernate、EclipseLink...)提供对二级缓存的支持,JPA 1.0 也提供了对二级缓存的支持。 不是 指定二级缓存的支持。因此,在使用 L2 缓存时,您实际上使用的是非标准的 JPA 扩展,并且不能从一个提供商移植到另一个提供商。休眠的 @Cache
注释与 EclipseLink 的不一样 @Cache
注释并且与 OpenJPA 的不具有可比性 @DataCache
注解。所有这些都是不同的,它们是专有的。如果您正在使用 Hibernate(这是我对您之前问题的理解),您不应该查看 EclipseLink 专有的东西(或者仅针对您的文化,但如果可以的话,这个问题超出了文化范围)。
其次,是什么让您认为 EclipseLink 的 @Cache
注释和EHCache有什么关系?AFAIK,EclipseLink 使用自己的 缓存实现 与EHCache无关。
事实上,我感觉你有点迷失在这里。你也许应该放慢一点,一步一步地做事:选择一种解决方案,坚持下去,确定你必须做什么,一一实施,让整个事情运转起来。专注于你的目标,暂时停止收集更多信息,花一些时间来消化你学到的新东西。
其他提示
据我所知,在Hibernate中,我们有这样的事情,
@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class TestPOJOcategory {
...
}
此注释有两个多个属性,region
和include
。设置大小,有效期和所有这些事情,我不知道任何事情。你应该考虑的Ehcache的文档,我相信了。