簡體   English   中英

休眠對象引用了未保存的瞬態實例-在刷新之前保存瞬態實例

[英]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.

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