Как с помощью QueryDSL создать выражение для коллекции, в которой подпункты соответствуют всем критериям?

#java #hibernate #querydsl

#java #спящий режим #querydsl

Вопрос:

Предположим, у меня есть Appointment таблица и Person таблица, где an Appointment имеет много Person s .

Если бы я хотел найти все встречи, содержащие хотя бы одного человека в моем списке, я бы сделал:

 Collection<Person> personsList = getInterestedPersons();
BooleanExpresssion expr = appointment.persons.any().in(personsList)
  

Однако, чего я действительно хочу, так это найти все встречи, в которых есть ВСЕ люди в моем списке.

Итак, как я могу создать a BooleanExpression , который позволит мне фильтровать все встречи, в которых есть все лица?

Примечание: я должен создать BooleanExprsesion , потому что это часть более крупного универсального фильтра для назначений, где все логические выражения получают и() редактируются вместе.

Еще одно замечание: я не знаю, как найти встречи, в которых есть только эти люди, по крайней мере, все те, что в списке.

Ответ №1:

В этом случае, я думаю, должно сработать следующее:

 BooleanBuilder personClause = new BooleanBuilder();
for (Person person : personList)
{
    personClause.and(appointment.persons.contains(person));
}
query.where(personClause); // to add the clause