Hibernate 二级缓存 - ehcache |

Not able to evict the associated entiries of Hibernate 2nd level cache - ehcache

我正在使用 Hibernate 4.17 并使用 ehcache 作为二级缓存。在hbm文件的定义中,我在class级别声明了缓存。

<class name="com.test.Program" table="program" mutable="false">

    <cache usage="nonstrict-read-write" />
 ....

我有如下定义的一对多关联

 <list name="parameters" cascade="none" batch-size="100">
    <cache usage="nonstrict-read-write" />
    <key column="program_oid"/>
    <index column="sequence" />
    <one-to-many class="com.test.ProgramParameter"/>
  </list>

我为 class - ehcache.xml 中的程序定义了一个区域。问题是每当我使用

驱逐二级缓存时
HibernateUtil.getSessionFactory().getCache().evictEntityRegion("com.test.Program");

com.test.Program 的所有实体都被驱逐但 com.test.Program.parameters 此外,如果我尝试像上面那样驱逐 com.test.Program.parameters 实体,我会得到异常 "Unknown Entity"。

如何驱逐关联 class 的实体?

尝试:

HibernateUtil.getSessionFactory().getCache().evictCollectionRegion("com.test.Program.parameters");

parameters 列表中的缓存设置将仅将该列表中实体的标识符存储在单独的 collection cache 中,使用父程序实体的标识符作为键。

ProgramParameter 实体本身不会被缓存,除非您对该实体进行了相应的缓存设置,例如

<class name="com.test.ProgramParameter" table="program_parameter" mutable="false">

    <cache usage="nonstrict-read-write" />
 ....

无论何时使用集合缓存,都应该缓存实体,否则 Hibernate 仍需要从数据库中获取集合中的每个实体。