我有两个表/实体。一切正常(省略 getter 和 setter)。
@Entity
public class Book() {
@Id;
int id;
@ManyToMany
List<Category> categories;
}
@Entity
public class Category {
@Id
int id;
@ManyToMany
List<Book> books;
}
JPA/Hibernate 使用名为 book_category 的连接表(其中包含字段 book_id 和 Category_id)按预期创建数据库结构。
类别是提前创建的,因此并非所有类别都有书籍。 我想查询包含书籍的不同类别。
下面的 SQL 查询可以做到这一点:
SELECT DISTINCT <things> FROM book_category JOIN category ON category.id = book_category.category_id
但是我如何从存储库中获取类别列表?
最佳答案
如果您想要分配有书籍的所有类别,那么我认为您只需要对 Category
实体进行查询即可检查其图书集合的大小:
select c from Category where size(c.books) > 0
即使直接查询联结表是可能的,例如通过 native 查询,我认为这不会被认为是良好的 JPA 实践。相反,您已有的两个多对多实体应该允许您执行所需的查询。
关于java - JPA 中的多对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47572376/