【问题标题】:NullPointerException happening intermittently with Hibernate criteriaQueryNullPointerException 与 Hibernate criteriaQuery 间歇性发生
【发布时间】:2021-04-24 01:54:06
【问题描述】:

我正在多线程环境中开发一个 springboot 应用程序,在该环境中我使用带有 javax.persistence.EntityManager 的 Hibernate 来访问数据库。我有单独的 HikariPools 用于读取和写入查询。

在这里,从数据库(所有读取查询)执行读取操作时的多个线程正在使用单个读取连接(因为我已经自动连接了 entityManager 而没有使用 PersistanceContext)。同样,多个线程也将在 writeEntityManager 的帮助下写入 db,其中所有线程都使用单个连接。

我遇到了 AbstractLockUpgradeEventListener.upgradeLock 的问题。这是间歇性发生的,无法找到确切的根本原因。

几个假设:-

  • DB 利用率接近 100%。(这可能会给这个问题带来优势)
  • 在执行任何写入查询之前应用锁,如果一个线程花费的时间超过了足够的时间,线程就会饿死

任何人都可以在这里提出一些关于设计或实施策略或可能是实际根本原因的建议。

这只是偶尔发生一次

【问题讨论】:

  • 看起来你以某种方式传递了一个空锁提示,但是没有看到代码,很难说这是怎么发生的。

标签: database spring-boot hibernate entitymanager hikaricp


【解决方案1】:

Hibernate EntityManager 不是线程安全的,你不能在多个线程中使用它。

事实上,EntityManager 和加载的对象不能从多个线程中使用

https://discourse.hibernate.org/t/hibernate-and-multithreading/289

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    相关资源
    最近更新 更多