在一致性缓存中更新JPA对象的状态,而不必在数据库中更新它



我们有一个需求,我们希望在一致性缓存中更新JPA对象的状态,而不必在数据库中更新它。

我们当前正在使用query。setHint (QueryHints。QUERY_REDIRECTOR, new IgnoreDefaultRedirector());实现缓存。

听起来你正在使用TopLink Grid (http://www.oracle.com/technetwork/middleware/ias/tl-grid-097210.html)。

在这种情况下,TopLink Grid控制Coherence缓存的使用,包括使用多少单独的缓存(它为每个实体类型使用一个单独的缓存;默认情况下,缓存名是实体类的非限定名)。Coherence缓存的键是实体的id,值是实际的实体对象(可能被包装,见下文),而不是构造实体的"CacheEntry"对象,这是Hibernate二级缓存的情况。

我所知道的更新JPA实体状态的唯一方法是违反TopLink Grid的封装-即绕过JPA API,直接使用Coherence API,并了解TopLink Grid如何使用Coherence缓存。例如,您可以使用一个ConditionalPut处理器(条件为AlwaysFilter.INSTANCE),或者一个PofUpdater处理器来更新您的实体。

但是要注意,实体之间的关系有一些复杂性。如果一个实体具有关系映射,那么Coherence缓存中该实体的值是一个生成的类的实例,该类包装了实际实体并保存了关系信息。所以当你直接在TopLink网格缓存上使用Coherence API时,你必须考虑到这一点(见http://docs.oracle.com/middleware/1212/coherence/COHIG/tlg_integrate.htm#BGBCDFFJ)。

相关内容

最新更新