[英]How to use cascade type save,delete, update in hibernate annotation
任何人都可以解釋一下hibernate注釋如何使用不同類型的級聯,如delete,upadte,save-update?
如何確保刪除所有者時,其車輛也會被刪除(但不是相反)
@Entity
public class Owner
{
@OneToOne(cascade=CascadeType.ALL)
private DrivingLicense license;
@OneToMany(mappedBy="owner", cascade={CascadeType.PERSIST, CascadeType.MERGE})
private Collection cars;
...
}
@Entity
public class DrivingLicense
{
private String serialNumber;
...
}
@Entity
public class Car
{
private String registrationNumber;
@ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE})
private Owner owner;
...
}
這里的缺陷是有兩個CascadeType枚舉。 一個是javax.persistence,另一個是來自hibernate。 一般來說,我更喜歡使用持久性。
對於級聯更新,請記住“更新”是一個休眠術語,jpa不知道這一點。 Jpa不需要它,因為在JPA中,想法是您更新的字段將自動刷新到數據庫。 如果你對關系做了任何改變,那些也將會更新。 所以你不需要更新級聯。
對於save-update,這是一個使用persist或update的hibernate快捷方式,具體取決於對象的狀態。 由於你已經覆蓋了持久性和更新(見上文),你不需要對此進行級聯。
要級聯刪除,您可能希望使用@OrphanRemoval
。 這將確保如果關系的父級被刪除,孩子也會消失(但不是相反)。
@OneToMany(mappedBy="owner", cascade={CascadeType.PERSIST, CascadeType.MERGE})
@OrphanRemoval
private Collection cars;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.