天天看點

org.hibernate.TransientObjectException

使用JPA注解@ManyToMany做一個多對多的用例。

為了避免在删除主表資料時同時級聯删除從表資料,​​JPA官方文檔​​建議在主表的從表字段使用級聯注解:CascadeType.PERSIST,CascadeType.MERGE,進行配置。

主表代碼:

從表代碼:

Dao層代碼:

main代碼:

運作main方法,第18行報如下異常,這應該是一個Hibernate實作JPA接口的一個bug。

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: b12_ManyToMany_JoinTable.Hobby

政策一,使用CascadeType.ALL注解,可以儲存,但在删除操作時,産生ERROR: ORA-02292: 違反完整限制條件 (WXUATUSER.FK_ODDM1C9RTQFPO2HI2BCR4OUQX) - 已找到子記錄。不可取。

政策二,改用persist方法儲存,報異常:detached entity passed to persist。不可取。

政策三,使用Hibernate的注解@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}),增删改查,達到預期的級聯效果,删除主表資料不會級聯到從表。可取。

繼續閱讀