簡體   English   中英

org.hibernate.id.IdentifierGenerationException:試圖從空一對一屬性(hibernate+postgres)分配id

[英]org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property (hibernate+postgres)

我正在使用帶有 SpringDataJpa 和 PostgreSQL 的 hibernate 5.3.11,當我嘗試更新一個復雜的時,我得到“org.hibernate.id.IdentifierGenerationException:試圖從空一對一屬性 [packagename.ClassB.classA] 分配id”實體類 C.

  • ClassC 是 @OneToMany 和 ClassA
  • ClassA 是帶有 ClassB 的 @OneToOne。
  • 在調用更新方法之前,所有實體都有彼此的鏈接。
  • ClassC 是一個父實體,級聯到 ClassA,級聯到 ClassB。
  • 這個問題似乎只與 A<->B 關系有關。
  • show-sql 告訴我 ClassA 保持良好,但似乎由於某種原因它在休眠狀態的某個地方失去了與 ClassB 的鏈接。
  • 第一次持久化實體工作正常。 錯誤僅在更新時出現。 而且我什至不更新 ClassB 和 ClassA 的現有實體,而是用新實體替換它們。

關系:

關系

SQL中的B類 SQL中的B類

SQL中的A類 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;
}

簡短回答:我使用了 SpringBoot ver.2.1.8。 更新到 2.2.1 有所幫助。 長答案在這里升級后,@MapsId 在保存現有實體時拋出錯誤,但其他方面工作正常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM