網頁

2018/6/20

JPA @OneToOne, @OneToMany的orphanRemoval屬性

在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物件中的一本bookbookSet移除時,資料庫Book資料表的該本書的資料列會被刪除。

orphan就是孤兒的意思,orphanRemoval=true的意思就是child沒有parent時就會被刪除。

而和CascadeType.REMOVE不同的是,CascadeType.REMOVE是當Authur物件從資料表中刪除時,其所關聯的child,也就是所屬的bookSet中的每一個Book也會從資料表被一併刪除。


參考:

沒有留言:

張貼留言