2017-02-15 66 views
1

我有表多對多的關係:JPQL接受報名多對多的關係

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

什麼是找到已選定的類別(按id)所有Books的最快方法。

+0

你用什麼樣的一個DAO的表「book_category」查詢? – px06

+0

JPA。在DAOInterface中,我添加了方法,返回書籍列表 – villat

回答

1

如果你想使用JPQL那就試試這個:

select b 
from Books b 
    inner join b.categories c 
where c.id = :id 
在你的倉庫

那麼:(如果你正在使用JPA API,然後使用EntityManager代替Hiberantes Session

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

使用本地查詢會更有效率,因爲JPQL必須進行兩次連接,但是您將失去可移植性優勢。

就在旁邊,你可能需要在JPQL查詢使用DISTINCT

+0

謝謝,它對我來說非常合適 – villat

0

你可以寫一個jpql。

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

如果你只想書籍ID,你可以寫一個原生SQL查詢直接在