2016-09-30 5 views
1

Предположим, у меня есть таблица Appointment и таблица Person, где Appointment имеет множество Person s.С QueryDSL, как вы создаете выражение в коллекции, где подпункты соответствуют всем критериям?

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

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

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

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

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

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

ответ

1

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

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