java - JPA 中的多对多查询

标签 java mysql jpa spring-boot spring-data-jpa

我有两个表/实体。一切正常(省略 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/

相关文章:

pdf-generation - 使用 PDFBox 生成的 PDF 为空白

java - Selenium WebDriver 如何使用“确定”和“取消”按钮关闭浏览器确认弹出窗口

java - Hibernate ManyToOne 映射不在 PKey 上

java - Spring - 更改 persist_logins 的架构连接

java - 使用 SAML (SSO) 的 Web 服务安全性 - 如何?

java - 使用 Hibernate,拦截器接收与当前值和先前值相同的集合对象,如何获取真实的当前值和先前值?

javascript - 从函数中的查询获取结果并计算 Codeigniter 中的 num_rows

php - 如何获得分组行的标准差?

mysql - 如何将各种 MySQL 查询结果合并到单个 JSON 对象中

java - JPA,无法删除记录