Infinispan with Hibernate:更新后不会将对象添加到缓存或删除

Infinispan with Hibernate:更新后不会将对象添加到缓存或删除,hibernate,second-level-cache,infinispan,Hibernate,Second Level Cache,Infinispan,目前,我们的Infinispan二级缓存存在一些问题。我们准备了两个测试用例: 1) 新创建的对象不会放在二级缓存中。 我们在第一个事务中创建一个新对象(TestEntity)。我们看到它没有被放入二级缓存,即使我们刷新它。当我们关闭事务(容器管理)并创建第二个事务时,新创建的对象仍然没有在二级缓存中找到,但是如果我们加载它,我们会在数据库中找到它。因此,我们确信它是在第一个事务中创建和提交的。但是为什么在第一个事务关闭后,新创建的对象没有放入二级缓存中呢 2) 刷新后,更新的对象将从二级缓存中

目前,我们的Infinispan二级缓存存在一些问题。我们准备了两个测试用例:

1) 新创建的对象不会放在二级缓存中。 我们在第一个事务中创建一个新对象(TestEntity)。我们看到它没有被放入二级缓存,即使我们刷新它。当我们关闭事务(容器管理)并创建第二个事务时,新创建的对象仍然没有在二级缓存中找到,但是如果我们加载它,我们会在数据库中找到它。因此,我们确信它是在第一个事务中创建和提交的。但是为什么在第一个事务关闭后,新创建的对象没有放入二级缓存中呢

2) 刷新后,更新的对象将从二级缓存中删除 我们正在从数据库加载一个实体,因此它位于二级缓存中。现在我们正在更新这个加载的实体的属性并进行刷新。如果我们再次检查二级缓存,该实体将不再缓存。为什么在更新+刷新后会将其从缓存中删除?我们如何防止这种情况

案例1: 代码:

日志输出第1个事务:

17:54:30,730 INFO [stdout] (default-threads - 2) +++++ new TestEntity ( ): false
17:54:30,745 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): false
17:54:30,761 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): false
17:54:30,761 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): false
17:55:00,058 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): false
17:55:00,058 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): Loaded!
17:55:00,058 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): Cached!
日志输出第二个事务:

17:54:30,730 INFO [stdout] (default-threads - 2) +++++ new TestEntity ( ): false
17:54:30,745 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): false
17:54:30,761 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): false
17:54:30,761 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): false
17:55:00,058 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): false
17:55:00,058 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): Loaded!
17:55:00,058 INFO [stdout] (default-threads - 2) +++++ new TestEntity (TMP1366041270730): Cached!
案例2: 准备:已在DB中的实体“TMP0000000000043”的预加载

代码:

日志输出: 17:21:17685信息[stdout](默认线程-6)生命周期引擎测试实体:true 17:21:17857信息[stdout](默认线程-6)生命周期引擎测试实体:false     我们正在使用以下设置: -EAP-6.0.1 -冬眠4.2 -由EAP-6.0.1提供的Infinispan作为二级缓存

子系统配置:

<subsystem xmlns="urn:jboss:domain:infinispan:1.3"> 
<cache-container name="hibernate" default-cache="local-query" module="org.jboss.as.jpa.hibernate:4">
<local-cache name="entity">
<transaction mode="NON_XA"/>
<eviction strategy="LRU" max-entries="10000"/>
<expiration max-idle="100000"/>
</local-cache>
<local-cache name="local-query">
<transaction mode="NONE"/>
<eviction strategy="LRU" max-entries="10000"/>
<expiration max-idle="100000"/>
</local-cache>
<local-cache name="timestamps">
<transaction mode="NONE"/>
<eviction strategy="NONE"/>
</local-cache>
</cache-container>
</subsystem>
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="javax.persistence.sharedCache.mode" value="ENABLE_SELECTIVE" />
<property name="hibernate.cache.default_cache_concurrency_strategy" value="transactional" <property
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)