![](/img/trans.png)
[英]object references an unsaved transient instance - save the transient instance before flushing
[英]Hibernate object references an unsaved transient instance - save the transient instance before flushing
錯誤:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.SomeObject
碼:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SOMEOBJECTID", nullable = true, insertable=true, updatable=true)
public SomeObject getSomeObject() {
return this.someObject;
}
public void setSomeObject(SomeObject someObject) {
this.someObject= someObject;
}
我有一個表格,其中各種選項是否需要someObject。
不幸的是,我收到如上所述的錯誤
我也嘗試了CascadeType.ALL
,但是
org.hibernate.PropertyValueException: not-null property references a null or transient value: com.SomeObject
原因是什么? 顯然我設置了nullable = true(同樣在數據庫中),即使我遇到此錯誤。 有任何想法嗎?
假設您有一個Order
實體與OrderLine
實體具有OneToMany
關系。 現在,如果您沒有設置CASCADE
屬性,那么當您嘗試保存這樣的Order
實體時:
Order order = new Order();
OrderLine orderLine = new OrderLine();
order.setOrderLine(orderLine);
session.save(order);
那么您將得到一個異常說:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing
要解決此問題,您必須在保存Order
之前保存OrderLine
:
session.save(orderLine);
session.save(order);
現在,如果您具有雙向關系,並且還嘗試設置CASCADE
屬性並執行以下相同操作:
Order order = new Order();
OrderLine orderLine = new OrderLine();
order.setOrderLine(orderLine);
session.save(orderLine);
session.save(order);
那么您將得到一個異常:
org.hibernate.PropertyValueException: not-null property references a null or transient value
因為orderLine
具有order
屬性,在這種情況下,該屬性為null
,因為我們沒有設置value。 因此,要解決此問題,您需要通過添加以下額外的行來在雙方之間正確維護關系:
orderLine.setOrder(order);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.