Спецификации JPA: Выберите элементы, в которых атрибут списка содержит элемент с определенным значением. - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь решить следующую проблему со спецификациями JPA:

Рассмотрим следующие классы:

public class Language {
    private String name;
    ...
}

public class Person {
    private List<Language> languages;
    ...
}

Как выбрать все Person s, которые говорят на языке симя x?Я ищу решение, использующее CriteriaBuilder, которое должно генерировать Predicate, которое я могу 'и' вместе с другими предикатами.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Это на самом деле довольно просто:

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, соответствующий обязательному атрибуту присоединяемой сущности вашим критериям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...