2012-07-27 129 views
2

Hibernate的版本:4.0.1.Final/JPA休眠/ JPA:在合併意外級聯

你好,

我想合併超然臺。執行entityManager.merge()後,所有的子表都從數據庫中選擇。

子表中註釋parentTable有:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "parentTable") 

沒有級聯註解。我不想在合併時級聯子表。 如何禁用合併級聯?

@Transactional 
public void save() { 
    entityManager.merge(parentTable); //cascades child´s here 
} 

只有先前提取過的子表被重新選擇。

感謝 tak3shi

+0

您是否找到阻止合併級聯的最終解決方案? – 2017-05-31 09:36:09

回答

0

所有級聯默認情況下禁用。如果您不想級聯任何內容,只需將級聯屬性添加到@OneToMany註釋。

在另一方面,如果你想級聯一切,除了合併,使用下列內容:

@OneToMany(fetch = FetchType.LAZY, 
      mappedBy = "parentTable" 
      cascade = {CascadeType.DETACH, CascadeType.PERSIST, 
         CascadeType.REFRESH, CascadeType.REMOVE}) 

也許有裏面什麼都沒有做級聯合並操作的一些其他問題。在這種情況下,顯示實體以及創建和合並它們的代碼將非常有用。

+0

我不使用任何級聯。我也嘗試只設置CascaType.DETACH,但它仍然級聯合並。 – tak3shi 2012-07-27 09:12:36

+0

@Transactional public void save() { entityManager.merge(parentTable); //cascades child´s here } tak3shi 2012-07-27 09:19:28

+0

是什麼讓你認爲這個操作會導致合併發生?實際上對列表中的實體執行了哪些更改?很有可能您會看到與父級和子級之間的關係狀態相關的查詢,這與合併無關。保存父母和子女之間的變化關係是父母的保存(在這種情況下通過合併操作)狀態的一部分。 – 2012-07-27 09:49:15