当前位置: 首页 > 知识库问答 >
问题:

IdentifierGenerationException:试图从null一对一属性分配id(Hibernate+Postgres)

党宇定
2023-03-14

我将hibernate 5.3.11与SpringDataJpa和PostgreSQL一起使用,在试图更新复杂实体ClassC时,我得到了“org.hibernate.id.IdentifierGenerationException:试图从null一对一属性[packagename.classb.classa]分配id”。

  • classC是@onetomany with classa
  • classa是@onetoone with classb.
  • 在调用update方法之前,所有实体都有相互链接。
  • ClassC是父实体并级联到ClassA,而ClassA级联到ClassB。
  • 该问题似乎只与<->B关系有关。
  • show-sql告诉我ClassA可以很好地保存,但是由于某些原因,它似乎在Hibernate中的某个地方失去了到ClassB的链接。
  • 第一次持久化实体运行良好。错误只在更新时出现。我甚至不更新ClassB和ClassA的现有实体,而是用新的实体替换它们。

关系:

Java实体:

@Data
@Entity
@EqualsAndHashCode(exclude = {"classA"})
public class ClassA {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @ManyToOne
    @JoinColumn(name = "classC_id")
    private ClassC classC;
    
    @OneToOne(mappedBy = "classA", cascade = CascadeType.ALL)
    private ClassB classB;
}
    
@Data
@Entity
public class ClassB {
    
    @Id
    private Long id;
    
    @OneToOne
    @JoinColumn(name = "id")
    @MapsId
    private ClassA classA;
}

共有1个答案

景嘉实
2023-03-14

简短的回答:我使用了SpringBoot Ver.2.1.8。更新到2.2.1有所帮助。在升级后,@Mapsid在保存现有实体时抛出了一个错误,但其他情况下工作正常

 类似资料:
  • 我已经开始使用PowerShell来完成一些事情,并在PowerShell中使用变量。 我遇到的问题是,当我将变量分配给类中定义的变量时,测试返回而不是。 示例代码: 现在,对未定义变量< code>$test2的测试返回< code>true,因为PowerShell中的每个未定义变量都被赋予了< code>$null。 但是,如果我测试我分配给的对象的属性,则会测试的 是不是因为在PowerS

  • 我想保存数据到mySql表与这些代码 category.blade.php CategoryController.php 但是当我按下addEditCategory视图中的submit按钮时,尝试将属性“parent_id”指定为null,我如何解决这个问题?

  • 我对Hibernate有一个问题:我有两个实体Libro和ediative,它们具有多对一的关系。当我尝试持久化时,会出现以下错误: Hibernate:选择编辑。ID_Editical,Editical_。NOMBRE as NOMBRE4_u,editorial_u。ID\u目录为ID3\u 4\u,editorial\u。NIF作为NIF4_来自Editory Editory_ where

  • 我有示例代码来检查双向关系是如何工作的。 我可以看到这种表h2表:- A:- B:- 对于B表,我期待一个列,正如我在代码中提到的。 所以我在我的控制器中,如果我试图检索B,如下所示:- 它就像一条链条,一条链条,一条链条。我正在学习hibernate和表的关系。显然我误解了什么。我的目的是双向的,当我加载A时,我可以访问相关的B。同样,当我加载B时,我可以访问相关的A。我如何实现这个目标?

  • http://docs.jboss.org/hibernate/orm/3.3/reference/en-美国/html/collections.html#collections-onetomany 医生说: not-found(可选-默认为exception):指定如何处理引用丢失行的缓存标识符。忽略会将丢失的行视为空关联。 请帮助我理解这个属性的用途?这里的缓存标识符是什么?

  • 问题内容: 这有效: 但这不是: 为什么?我有一种感觉,这与对象是内置类有关,但是我发现这并不令人满意,因为我在MyClass的声明中没有进行任何更改。 问题答案: Python将属性存储在字典中。您可以将属性添加到,看到它具有 : 重要的区别是没有属性。