2008-12-23 100 views
5

我試圖做一個應用程序,通過觀察所有更改,然後立即堅持對象的問題,保持對象模型與數據庫同步。模型中的許多對象都有大列表或樹中的子對象。JPA在運行時級聯選項

當我從數據庫加載一個對象時,我依靠單向級聯關係來檢索它的所有子級並將它們包含在應用程序中。

但是,可以更改父對象中需要持久性的字段,並且我可以確定沒有任何子對象受到影響。所以我想堅持父母,而不是在所有級聯孩子持續存在的情況下擊中數據庫。

@Entity 
public class Parent { 

    @OneToMany(cascade=CascadeType.ALL) 
    public List children; 

} 

我怎麼能覆蓋級聯選項時,我堅持一個父對象?或者我應該將它設置爲REFRESH並確保我永遠不需要級聯堅持?

回答

4

從數據庫中讀取對象並持久保留它們依賴於兩種不同的註釋。

加載對象時,它也將獲得關係中的fetch屬性定義的任何渴望(FetchType.EAGER)關係的另一端。

根據您的JPA提供程序,您可能有選項來覆蓋此行爲。 EclipseLink通過令人難以置信的有用QueryHint.BATCH,肯定會。

當您堅持,刪除或刷新時,級聯類型是相關的。

因此,失去級聯,保持取回和解決問題。

就我個人而言,我認爲級聯都是要求麻煩,但意見會有所不同。

一個體面的JPA提供者將擁有一個非常複雜的(可配置的)緩存方案。也許你應該問爲什麼你要重塑那個特定的輪子?

純粹是爲了性能而異步更新的問題嗎?或者是其他原因?

+0

這是一個獨立的應用程序,數據庫位於同一臺機器或附近的服務器上。整個模型需要存儲在內存中,以便用戶可以使用它。我試圖讓所有用戶操作的結果保持不變,因此他們不必點擊「保存」。 – Cogsy 2008-12-23 06:54:38