【问题标题】:org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property (hibernate+postgres)org.hibernate.id.IdentifierGenerationException: 试图从空的一对一属性分配 id (hibernate+postgres)
【发布时间】:2021-01-16 08:54:57
【问题描述】:

我将休眠 5.3.11 与 SpringDataJpa 和 PostgreSQL 一起使用,并且在尝试更新复杂实体 ClassC。

  • ClassC 是 @OneToMany 和 ClassA
  • ClassA 是 @OneToOne 和 ClassB。
  • 在调用更新方法之前,所有实体之间都有链接。
  • ClassC 是父实体,级联到 ClassA,ClassA 级联到 ClassB。
  • 问题似乎只与 AB 关系有关。
  • show-sql 告诉我 ClassA 可以正常运行,但似乎由于某种原因它在休眠状态的某处失去了与 ClassB 的链接。
  • 第一次持久化实体可以正常工作。该错误仅在更新时出现。而且我什至不更新 ClassB 和 ClassA 的现有实体,而是用新实体替换它们。

关系:

SQL 中的 B 类

SQL 中的 A 类

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;
}

【问题讨论】:

    标签: java spring postgresql hibernate


    【解决方案1】:

    简短回答:我使用的是 SpringBoot ver.2.1.8。更新到 2.2.1 有所帮助。 长答案Post-upgrade, @MapsId is throwing an error when saving an existing entity, but otherwise works fine

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多