Spring JPA难以删除
是否有人可以帮助实现以下模型,但无法根据需要删除Spring JPA难以删除,jpa,spring-data-jpa,Jpa,Spring Data Jpa,是否有人可以帮助实现以下模型,但无法根据需要删除 作者与书的关系 书有很多种体裁 书的种类很多 我可以创建数据库并添加记录。我相信我的级联指定是错误的,因为我不能做以下事情 从作者那里,删除一本书(是的,奇怪,版权问题:),从书中删除它,但也从体裁中删除它 这个问题取决于我在流派删除时得到的FK冲突或在书籍删除时得到的FK冲突。这是僵局吗?这是一个微不足道的模式,必须可以解决。多谢各位 最终,我认为cascade最好用于处理删除所有子关系的情况,但我仍然认为它是一个复杂的注释,大多数人并不理解。
最终,我认为cascade最好用于处理删除所有子关系的情况,但我仍然认为它是一个复杂的注释,大多数人并不理解。我认为,如果
图书
实体拥有作者和流派关系,那么ORM别无选择,只能在图书被删除时删除这些关系
Hibernate: insert into author (id) values (null)
Hibernate: insert into genre (id) values (null)
Hibernate: insert into book (id) values (null)
Hibernate: insert into book_authors (books_id, authors_id) values (?, ?)
Hibernate: insert into book_genres (books_id, genres_id) values (?, ?)
Book(id=1, authors=[Author(id=1)], genres=[Genre(id=1)])
Hibernate: select book0_.id as id1_1_0_ from book book0_ where book0_.id=?
Hibernate: delete from book_authors where books_id=?
Hibernate: delete from book_genres where books_id=?
Hibernate: delete from book where id=?
当我设置一个简单的springboot项目时,它似乎就是所有这些的例子
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Author {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
@ManyToMany(mappedBy = "authors")
@lombok.ToString.Exclude
private Set<Book> books;
}
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Genre {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany(mappedBy = "genres")
@lombok.ToString.Exclude
private Set<Book> books;
}
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Book {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
private Set<Author> authors;
@ManyToMany
private Set<Genre> genres;
}
这些日志似乎表明,当一本书被删除时,作者和流派都被清除了
Hibernate: insert into author (id) values (null)
Hibernate: insert into genre (id) values (null)
Hibernate: insert into book (id) values (null)
Hibernate: insert into book_authors (books_id, authors_id) values (?, ?)
Hibernate: insert into book_genres (books_id, genres_id) values (?, ?)
Book(id=1, authors=[Author(id=1)], genres=[Genre(id=1)])
Hibernate: select book0_.id as id1_1_0_ from book book0_ where book0_.id=?
Hibernate: delete from book_authors where books_id=?
Hibernate: delete from book_genres where books_id=?
Hibernate: delete from book where id=?
我认为这正是你的问题所在。在没有级联的情况下开始,也许永远不要再添加级联。使用一个服务层,仔细地做你需要做的事情。此外,作者和书应该是很多的吗?哇。多么专业和简洁的回答啊,泰。这里有几种可教的技巧。我发现你的lombok.ToString.Exclude不太需要JsonBackReference。是的,
lombok.EqualsAndHashCode.Exclude
也应该排序。看见