代码之家  ›  专栏  ›  技术社区  ›  gene b.

Hibernate 6错误:无法调用“org.Hibernate.engine.spi.EntityKey.getIdentifier()”,因为“this.EntityKey”为null

  •  0
  • gene b.  · 技术社区  · 3 年前

    我们正在从Spring Boot 2.7->3.0.2,以及对Hibernate 6的相关更改。

    运行应用程序时出现以下错误:

    java.lang.NullPointerException: 
    Cannot invoke "org.hibernate.engine.spi.EntityKey.getIdentifier()" because "this.entityKey" is null
    

    我们的 持久性.xml 提供程序是

    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    

    有一个Hibernate票证显然是最近为此错误输入的:

    https://hibernate.atlassian.net/browse/HHH-16075?filter=-4

    根据这张票,这个错误在Hibernate中得到了修复 6.1.7 .我们在POM中添加了以下额外的Hibernate Core依赖项并进行了重建,但是 错误仍在发生

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.1.7.Final</version>
            <type>pom</type>
        </dependency>
    

    还有其他可能的解决方案吗?

    更新 我们注意到这种情况发生在复合密钥上。我们最初怀疑一些复合密钥部分为NULL,这在以前可能是允许的,但后来发现所有部分都不是NULL。但是,复合密钥的某些内容导致了此错误。

    0 回复  |  直到 3 年前
        1
  •  1
  •   Christian Beikov    3 年前

    在复合主键中包含可为null的部分是不可行的。如果这以前有效的话,那是错误的。主键的定义就是所有列都不能为null且唯一。

        2
  •  0
  •   gene b.    3 年前

    关于 复合主键 导致Hibernate 6中出现此错误。我们验证了,如果我们用简单的1列PK替换复合密钥,错误就会消失。在这个版本的Hibernate中,用真正的单ID列替换Composite Keys似乎是一个好主意,可以解决这个问题。