在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也会从资料表被一并删除。

https://matthung0807.blogspot.com/2018/06/jpa-onetoone-onetomanyorphanremoval.html

标签: none

添加新评论