Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何使用JPA删除具有OneToMany关系的外键条目_Hibernate_Jpa - Fatal编程技术网

Hibernate 如何使用JPA删除具有OneToMany关系的外键条目

Hibernate 如何使用JPA删除具有OneToMany关系的外键条目,hibernate,jpa,Hibernate,Jpa,我有一本书,作者和分类实体 书与作者有一种@onetone关系,书与类别也有一种@OneToMany关系 Book实体看起来像: @Entity public class Book { @Fetch(FetchMode.JOIN) @OneToOne(orphanRemoval = true, mappedBy = "book", optional = true) private Author author @Fetch(FetchMode.JOIN)

我有一本书,作者和分类实体

书与作者有一种
@onetone
关系,书与类别也有一种
@OneToMany
关系

Book实体看起来像:

@Entity
public class Book {
    @Fetch(FetchMode.JOIN)
    @OneToOne(orphanRemoval = true, mappedBy = "book", optional = true)
    private Author author

    @Fetch(FetchMode.JOIN)
    @OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "book", targetEntity = Category.class, fetch = FetchType.EAGER)
    private List<Category> categories = new ArrayList<>();
} 
@Entity
public class Author {
    @OneToOne(optional = false)
    private Book book;
}
@Entity
public class Category {
    @ManyToOne(cascade = CascadeType.ALL, optional = true)
    @JoinColumn(name = "book_id", nullable = false)
    private Book book;
}
类别实体如下所示:

@Entity
public class Book {
    @Fetch(FetchMode.JOIN)
    @OneToOne(orphanRemoval = true, mappedBy = "book", optional = true)
    private Author author

    @Fetch(FetchMode.JOIN)
    @OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "book", targetEntity = Category.class, fetch = FetchType.EAGER)
    private List<Category> categories = new ArrayList<>();
} 
@Entity
public class Author {
    @OneToOne(optional = false)
    private Book book;
}
@Entity
public class Category {
    @ManyToOne(cascade = CascadeType.ALL, optional = true)
    @JoinColumn(name = "book_id", nullable = false)
    private Book book;
}
我对JPA删除有问题。在我的测试用例中,我有两个类别条目链接到一个图书条目。我希望在删除图书条目时,Category和Author的相应条目也会被删除

“我的服务”中的删除呼叫是:

bookRepository.delete(book);

然而,我发现只有作者条目被删除,所有其他条目仍然存在。你能发现我的设置有问题吗?在删除图书条目之前,我不想手动删除所有外键条目。

尝试删除图书实体中的OrphanRemove属性或使用OrphanRemove=false尝试删除图书实体中的OrphanRemove属性或使用OrphanRemove=false