hibernate - 在这个例子中,Hibernate 如何删除关系?
问题描述
@Test
@DisplayName("delete book from author")
public void whenDeleteAuthorFromBook_thenOneDeleteStatement() {
Author author = authorRepository.findByName("a1");
Book book = bookRepository.findByName("b1");
author.removeBook(book);
}
我虽然调用存储库时会发生数据库中的任何更改。在这里,我们从 Collection Author 中删除了一个 Object Book(由 ManyToMany 映射)。
Hibernate 是否使用 DataSource 并在删除后立即通过调用 SQL 来删除关系?我非常感谢你的回答!
实体作者
@NoArgsConstructor
@Data
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String name;
public Author(String name){
this.name=name;
}
@ManyToMany (cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "author_book",
joinColumns = @JoinColumn(name = "author_id"),
inverseJoinColumns = @JoinColumn(name = "book_id")
)
private List<Book> books=new ArrayList<>();
public void addBook(Book book){
this.books.add(book);
book.getAuthors().add(this);
}
public void removeBook(Book book){
this.books.remove(book);
book.getAuthors().remove(this);
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof Author)) return false;
return id != null && id.equals(((Author) o).getId());
}
@Override
public int hashCode() {
return 31;
}
}
实体书
@NoArgsConstructor
@Data
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String name;
@ManyToMany(mappedBy = "books")
private Set<Author> authors=new HashSet<>();
public Book(String name){
this.name=name;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof Author)) return false;
return id != null && id.equals(((Book) o).getId());
}
@Override
public int hashCode() {
return 31;
}
}
解决方案
推荐阅读
- python - 我需要计算蛋白质片段的分子量并将这些值放在一个列表中
- c# - 如何将 Parallel.For 转换为 PLINQ
- sql - 是否可以从 sql 查询中返回一个子表,但也可以将该表扫描到一组新的行中?
- sql - SQL Server 中的正则表达式模式搜索
- php - barbushin imap-php textPlain 在附加 .eml 文件时包含 base64 图像
- javascript - 如何通过 Firebase 和 React 更新离线和在线用户
- google-app-engine - Google App Engine Errno 60 操作超时
- git - GitVersion 和 NuGet - 意外的版本排序
- prolog - 纯 append/3 用于不会留下选择点的模式 (-,+,+)
- amazon-web-services - EC2 实例之间通过域名的 HTTPS 流量