1
我有一个entity
A,它被定义为@Cacheable
。我有查询缓存加载entity
A指定的缓存区域说“regionA”。这是通过setHint
并启用缓存完成的。Infinispan 2LC:在查询缓存中指定区域的实体缓存
至于在wildfly
的设置,regionA
没有配置eviction
和expiration
1天,其中作为entity
缓存有默认eviction
和expiration
让的说,如下。
<local-cache name="entity">
<transaction mode="NON_XA"/>
<eviction strategy="LRU" max-entries="10000"/>
<expiration max-idle="1000000"/>
</local-cache>
<local-cache name="local-query">
<eviction strategy="LRU" max-entries="10000"/>
<expiration max-idle="100000"/>
</local-cache>
<local-cache name="regionA" statistics-enabled="true">
<eviction strategy="NONE" max-entries="-1"/>
<expiration lifespan="86400000" max-idle="14400000"/>
</local-cache>
现在,如果我执行了第一次的时候,有没有查询缓存结果,因此SQL运行来获取实体。第二次运行后,3rd似乎是从缓存regionA
中取得的,因此没问题。但18小时后,我尝试运行相同的查询,看起来像查询再次运行。
但我想如果查询缓存配置为“1天”到期,为什么它再次运行SQL
?是否因为entity
缓存在那段时间过期?那么entity
缓存不需要缓存区域特定的设置? 如何区分存储在特定缓存区域中的这些实体,请遵循区域特定设置。
谢谢。
感谢您的发现。那么是否有任何方法指定实体使用regionA缓存配置并将它们存储在指定的缓存区域中?因为默认情况下每个实体在其自己的区域下创建。 – ulab
您需要使用允许定义区域的Hibernate的'org.hibernate.annotation.Cache'。或者通过'orm.xml'在外部设置。 –
谢谢我明白了。因此,使用hibernate.cfg,我可以配置所有实体使用指定的区域或每个实体来使用指定的区域。但是不可能仅指定在查询中引用的具有缓存区域为regionA的实体。对? – ulab