Intereting Posts

Запрос критериев JPA во взаимосвязи «многие ко многим» с использованием оператора IN

У меня есть следующие два объекта:

Профиль, категория

В объекте «Профиль» у меня есть Список категорий, которые профиль имеет

В объекте Category я имею Список профилей, которые

Сгенерированная таблица называется profiles_has_categories и имеет следующие столбцы:

profile_id, category_id

Я хочу найти все профили, принадлежащие к любой из категорий, со следующими идентификаторами 1, 2, 3, 4

Я бы сделал это в обычном sql с:

SELECT p.* FROM profiles p, profiles_has_categories phc WHERE p.id = phc.profile_id AND phc.category_id IN (1, 2, 3, 4) 

Но я не могу понять, как это сделать, используя CriteriaBuilder для построения запроса в JPA:

 CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Profile> criteria = cb.createQuery(Profile.class); Root<Profile> root = criteria.from(Profile.class); // Profile_.categories is a collection of Category objects // categories is collection of Long (category ids) that i want to search in // but is not working criteria.where(root.get(Profile_.categories).in(categories)) List<Profile> results = em.createQuery(criteria).getResultList(); 

Вы не хотите получать , вы хотите присоединиться :

 criteria.where(root.join(Profile_.categories).in(categories))