2009-09-10 159 views
61

CascadeType.REFRESH實際上做了什麼?CascadeType.REFRESH實際上做了什麼?

的定義,因爲這是

當我們刷新一個實體在這一領域舉行的所有實體刷新太

,但是這是什麼意思在實踐中?有人能給我一個簡單的例子嗎?

回答

95

單個CascadeType描述可能有點令人困惑,但有一個簡單的方法可以從一般情況中找出它。

對於任何CascadeType的值,它意味着如果操作X上調用使用EntityManager接口的實例,該實例具有與其他實體實例的引用,而關聯已經CascadeType.X定義,則EntityManager操作也將適用於該關聯實體。

所以EntityManager.refresh()被定義爲:

從 刷新實例的狀態數據庫,覆蓋由 到實體的變化,如果有的話。

因此,如果實體A具有到實體B的引用,並且參考被註解爲@CascadeType.REFRESH,並EntityManager.refresh(A)被調用,那麼EntityManager.refresh(B)被隱式也調用。

+0

我知道這是舊的文章,但使用上述A和B的例子,如果B的實例當前分離,將一個CascadeType.PERSIST事業B到成爲持續性?我正在使用Hibernate的JPA實現。 – Andy 2012-10-08 14:08:56

+3

回答了我自己的問題。答案是否定的。您必須調用該對象上的保存以使其變爲持久性。 – Andy 2012-10-08 14:25:55

3

檢索由刷新: 管理對象可以從數據庫通過使用所述刷新方法被重新加載:

管理對象的存儲器中的內容被丟棄(包括變化,如果有),並替換爲數據即從數據庫中檢索。這可能有助於確保應用程序處理實體對象的最新版本,以防萬一它被檢索到後可能被另一個EntityManager更改。

來源:http://www.objectdb.com/java/jpa/persistence/retrieve

相關問題