Как выбрать записи из связанных таблиц HQL ManyToMany

Есть 3 таблицы product, category, product_and_category. Связь для category:

@ManyToMany
@JoinTable(name = "product_and_category",joinColumns = @JoinColumn(name = "category_id"),inverseJoinColumns = @JoinColumn(name = "product_id"))
private Collection<Prouct> products = new ArrayList<>();

Связь для product

@ManyToMany
@JoinTable(name = "product_and_category",joinColumns = @JoinColumn(name = "product_id"),inverseJoinColumns = @JoinColumn(name = "category_id"))
private Collection<Category> categories = new ArrayList<>();

Подскажите как написать HQL запрос чтобы например получить список category которые относятся к product с id = 1


Ответы (1 шт):

Автор решения: Михаил Ребров

Просто нужно делаете JOIN

В HQL это будет выглядеть так:

"SELECT c FROM Category c JOIN c.products p WHERE p.id = :idProduct"

Ну и пример кода с Query

TypedQuery<Category> query = entityManager.createQuery("SELECT c FROM Category c JOIN c.products p WHERE p.id = :idProduct", Category.class);
query.setParameter("idProduct", product.getId());
List<Category> categories = query.getResultList();
→ Ссылка