[英]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=0
且parent_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.