簡體   English   中英

JPA外鍵0 0值hibernate TransientPropertyValueException

[英]JPA foreign key zero 0 value hibernate TransientPropertyValueException

我發現hibernate(或mariadb)JPA似乎不能在外鍵中使用0值。

我有一個父類

class Parent {
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PARENT_ID", unique = true, nullable = false)
    private Integer parentId;
}

和一個兒童班

class Child {
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "CHILD_ID", unique = true, nullable = false)
    private Integer childId;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "PARENT_ID", nullable = false)
    private Parent parent;
}

所以我們父母有2行。 parent_id=0parent_id=1

我的問題是我在嘗試使用ID為0的父項時出錯。即此代碼

Parent p = entityManager.find(Parent.class, new Integer(0));
Child c = new Child();
c.setParent(p);
entityManager.persist(c);

將失敗並出現錯誤:

java.lang.IllegalStateException:org.hibernate.TransientPropertyValueException:非null屬性引用瞬態值 - 必須在當前操作之前保存瞬態實例:com.whatever.Child.parent - > com.whatever.Parent

但以下工作正常:

Parent p = entityManager.find(Parent.class, new Integer(1));
Child c = new Child();
c.setParent(p);
entityManager.persist(c);

所以我假設PARENT_ID=0以某種方式混淆了JPA,認為它不是一個有效的父對象。

或者這實際上是一個mariadb問題? 與您必須更改會話設置以將0插入AUTO_INCREMENT列的事實相關。

我可以做任何配置或注釋來使這項工作。 不幸的是,我們將JPA代碼放在現有系統上,因此更改PARENT_ID值並非易事。 (而且每個人都討厭數據轉換)。

任何提示非常感謝。

因此,MariaDB / MySQL處理AUTO_INCREMENT :數字為1或更大; 0是有效的序列號。 如果JPA無法忍受那些(以及其他一些)限制,JPA就會被破壞。 (對不起,但我對第三方軟件感到惱火,這使得MySQL用戶的生活變得困難。)

暫無
暫無

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

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