我有很多关系的表:
@ManyToMany
@JoinTable(name = "book_category",joinColumns = @JoinColumn(name = "book_id"),
inverseJoinColumns = @JoinColumn(name = "category_id"))
private List<Category> categories;
查找已选择类别(按ID)的所有Books
的最快方法是什么。
答案 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'上查询