簡體   English   中英

JPA - 從OneToMany關系中刪除子項

[英]JPA - delete a child from OneToMany relationship

@OneToMany關系中,如果我想刪除一個孩子,我是否需要從父母的集合中明確刪除該孩子,或者只是刪除孩子就足夠了?

例如, PersonPhone 每個人都有很多電話號碼。 如果我想從一個人中刪除一個電話號碼就足夠了:

EntityManager.remove(phone);

或者我需要事先做到這一點:

Person.getPhone().remove(phone); 

更不用說, CascadeType設置為MERGE

您需要從phones集合中明確刪除Phone ,僅使用EntityManager刪除phones是不夠的。

另一方面,使用orphanRemoval可能就足夠了,因此如果從集合中刪除實體,它將自動刪除。 就像是:

@OneToMany(mappedBy="person", orphanRemoval="true")
private List<Phone> phones;

另見: http//docs.oracle.com/cd/E19798-01/821-1841/giqxy/index.html

如果也刪除了父實體, Cascade.REMOVE僅刪除子實體。 Cascase.MERGE與此問題無關。

不確定MERGE是否足以讓實體被刪除級聯,您可能還必須定義DELETE級聯,並且根據數據的映射方式(有或沒有輔助表),甚至可能需要應用孤立刪除。

如果您不應用級聯進行刪除,而是使用JPA查詢或entityManager.remove(),那么從oneToMany集合中手動逐出它也是一個好主意。 原因很簡單:您可以手動將其從數據庫中刪除,但這並不意味着它自動從集合中刪除,因此對於父實體的生命周期,它仍然會引用一個不應該存在的實體了。 當你意外地改變所述實體的狀態時,事情會變得奇怪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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