在JPA的@OneToOne(一對一)及@OneToMany(一對多)有一個orphanRemoval屬性,其作用如下。
例如一個作者(Author)有多本書籍著作(Book),則在Author類別中會有Book的集合如下。
Author.java
public class Author {
...
@OneToMany(mappedBy="author", orphanRemoval=true)
private Set<Book> bookSet;
// getters and setters ommitted
}
Book.java
public class Book {
...
@ManyToOne
private Author author;
// getters and setters ommitted
}
orphanRemoval預設值為false。若設為true,則當Author物件中的一本book從bookSet移除時,資料庫Book資料表的該本書的資料列會被刪除。
orphan就是孤兒的意思,orphanRemoval=true的意思就是child沒有parent時就會被刪除。
而和CascadeType.REMOVE不同的是,CascadeType.REMOVE是當Authur物件從資料表中刪除時,其所關聯的child,也就是所屬的bookSet中的每一個Book也會從資料表被一併刪除。
參考:
沒有留言:
張貼留言