2017-02-15 14 views
1

У меня есть таблица с отношения многие ко многим:JPQL для записей многие ко многим

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

Какой самый быстрый способ найти все Books, которые выбранной категории (по идентификатору).

+0

Какого рода DAO вы используете? – px06

+0

JPA. В DAOInterface я добавил метод, который возвращает список книг – villat

ответ

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 должен сделать два соединения, но вы потеряете преимущество переносимости.

На стороне вам может потребоваться использовать DISTINCT в запросе jpql.

+0

Спасибо, он отлично работает для меня – villat

0

Вы можете написать jpql.

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

Если вы хотите просто забронировать иды, вы можете написать родной запрос SQL для запроса непосредственно на столе «book_category»