【问题标题】:JPQL for Entries Many To Many relationship条目多对多关系的 JPQL
【发布时间】:2017-07-03 23:22:24
【问题描述】:

我有一个多对多关系的表:

@ManyToMany
@JoinTable(name = "book_category",joinColumns = @JoinColumn(name = "book_id"),
                           inverseJoinColumns = @JoinColumn(name = "category_id"))
private List<Category> categories;

找到所有已选择类别的Books的最快方法是什么(按id)。

【问题讨论】:

  • 你在使用什么样的 DAO?
  • JPA。在 DAOInterface 中,我添加了返回书籍列表的方法

标签: java database hibernate jpa jpql


【解决方案1】:

如果你想使用 JPQL,那么试试这个:

select b
from Books b
  inner join b.categories c
where c.id = :id

然后在您的存储库中:

Query query = session.createQuery(/* above query*/);
query.setInteger("id", 123);
query.list();

(如果您使用的是 JPA api,请使用 EntityManager 而不是 Hiberantes Session)

使用本机查询会更高效一些,因为 JPQL 必须进行两次连接,但您会失去可移植性优势。

另一方面,您可能需要在 jpql 查询中使用DISTINCT。

【讨论】:

    【解决方案2】:

    你可以写一个jpql。

    select b from Book b inner join fetch b.categories as c where c.id=:category_id
    

    如果你只想要book id,你可以写一个原生的sql查询直接在'book_category'表上查询

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 2013-06-17
      • 2011-02-23
      • 2010-12-04
      • 2016-02-18
      • 2021-10-21
      • 2020-11-26
      • 1970-01-01
      相关资源
      最近更新 更多