Это на самом деле довольно просто:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> query = cb.createQuery(Person.class);
Root<Person> root = query.from(Person.class);
ListJoin<Person, Language> langJoin = root.join(Person_.langs);
query.where(cb.equal(langJoin.get(Language_.name), lang));
Таким образом, вы в основном присоединяете языки через соответствующую ассоциацию, а затем добавляете предикат equals
, соответствующий обязательному атрибуту присоединяемой сущности вашим критериям.