【问题标题】:Hibernate cache issue?休眠缓存问题?
【发布时间】:2012-11-29 09:50:38
【问题描述】:

我正在使用 JPA 和 Hibernate,在 JBOSS 5.1 中运行。

我得到了一个奇怪的行为,因为当我通过事务中的 EntityManager 写入一些数据时,我提交了这个事务,并且在我立即启动一个新事务来读取这个写入的数据后,新数据不会被返回查询(但旧的),但我看到数据库中提交的新数据(我通过另一个进程看到它)。

我可以根据需要重复此读取多次(在同一事务中的调试模式下),新数据将不会返回。

然后,如果我执行 entityManager.clear(),下一次读取(在同一事务中)最终返回数据。

有趣的部分从这里开始:相同的 JBoss(物理副本、库、配置、一切)安装在另一台机器上,指向同一个物理数据库工作正常(它无需清除 EM 即可获取数据)。所以它必须与环境有关......

有什么想法吗?

【问题讨论】:

    标签: java hibernate jpa jboss jboss5.x


    【解决方案1】:

    检查两台服务器上的JBoss/server/default/deployers/ejb3.deployer/META-INF/persistence.properties。

    不幸的是,默认情况下它仅包含hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider,它不是事务性的,应替换为org.hibernate.cache.jbc2.JBossCacheRegionFactory 或org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory。

    另见

    https://community.jboss.org/wiki/ClusteredJPAHibernateSecondLevelCachinginJBossAS5

    http://www.mastertheboss.com/hibernate-cache/using-hibernate-second-level-cache-with-jboss-as-5-6-7

    【讨论】:

    • 谢谢!好吧,两台服务器都是完全相同的副本,那些文件是相同的……唯一改变的是物理机和 JVM……
    • 不太可能,我可以在调试模式下保持事务几分钟并通过 EM 抛出查询,它总是返回旧数据,直到我“清除”EM,然后查询返回更新数据...整个 JBoss 是正常工作的 JBoss 的克隆,两者都访问同一个物理数据库...奇怪...
    猜你喜欢
    • 2011-11-18
    • 2011-10-30
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2016-08-13
    • 2012-04-29
    • 2015-01-05
    • 2017-01-16
    相关资源
    最近更新 更多