条目的JPQL多对多关系

时间:2017-02-15 10:39:50

标签: java database hibernate jpa jpql

我有很多关系的表:

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你可以写一个jpql。

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

如果您只想要书籍ID,可以编写本机SQL查询,直接在表'book_category'上查询