我有书籍,作者和类别实体。
图书与作者有@OneToOne
的关系,而图书与图书的关系也有@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;
}
我遇到了JPA删除问题。在我的测试用例中,我有两个与一个Book条目相关联的Category条目。我希望在删除Book条目时,Category和Author的相应条目也会删除。
我的服务中的删除电话是:
bookRepository.delete(book);
但是我发现只删除了作者条目,所有其他条目仍然存在。你能在我的设置中发现错误吗?我不想在删除Book条目之前手动删除所有外键条目。