我将 JBoss 5.1.0 GA 与 Hibernate 一起使用,现在我正在尝试启用二级缓存。我已将以下属性添加到我的 Hibernate 配置中。
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.MultiplexedJBossCacheRegionFactory"/>
<property name="hibernate.cache.jbc2.query.localonly" value="true"/>
<property name="hibernate.cache.region_prefix" value="my_prefix" />
我已经注释了我希望不经常更改的实体,如下所示:
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL)
这是基于我对文档的理解。
应用程序成功部署,没有可怕的消息(例如日志流中的 WARN 或 ERROR 消息)。在很短的时间内,我看到缓存工作(我正在使用 Hibernate 统计信息来查看这一点),但不久之后,我得到了表单的堆栈跟踪(即使以没有任何远程访问权限的单个用户身份登录):
“事务试图重新创建 MYCLASS。自此事务开始以来,它已经由另一个(可能是远程)事务创建。我们有一个并发创建事件”
接下来是一个巨大的堆栈跟踪,最终追溯到我所做的一个命名查询,它具有以下形式:
SELECT x FROM X WHERE x.deleted = false
命名查询没有用于缓存的附加注释。
任何有关如何解决此问题的建议将不胜感激。