使用 QueryDSL,如何在子项符合所有条件的集合上创建表达式?
With QueryDSL, how do you create an expression on a collection where the sub-items match all criteria?
假设我有一个 Appointment
table 和一个 Person
table,其中一个 Appointment
有很多 Person
。
如果我想在我的列表中找到包含 至少一个 人的所有约会,我会这样做:
Collection<Person> personsList = getInterestedPersons();
BooleanExpresssion expr = appointment.persons.any().in(personsList)
但是,我真正想要的是找到我列表中包含所有人员的所有约会。
那么,我如何构建一个 BooleanExpression
来过滤所有拥有所有人员的约会?
注意:我必须创建一个 BooleanExpression,因为这是一个更大的约会通用过滤器的一部分,所有的 BooleanExpressions 都用 and() 组合在一起。
另外请注意,我没有找到列表中 仅 那些人的约会,只是 至少所有 那些人。
在这种情况下,我想以下应该可行:
BooleanBuilder personClause = new BooleanBuilder();
for (Person person : personList)
{
personClause.and(appointment.persons.contains(person));
}
query.where(personClause); // to add the clause
假设我有一个 Appointment
table 和一个 Person
table,其中一个 Appointment
有很多 Person
。
如果我想在我的列表中找到包含 至少一个 人的所有约会,我会这样做:
Collection<Person> personsList = getInterestedPersons();
BooleanExpresssion expr = appointment.persons.any().in(personsList)
但是,我真正想要的是找到我列表中包含所有人员的所有约会。
那么,我如何构建一个 BooleanExpression
来过滤所有拥有所有人员的约会?
注意:我必须创建一个 BooleanExpression,因为这是一个更大的约会通用过滤器的一部分,所有的 BooleanExpressions 都用 and() 组合在一起。
另外请注意,我没有找到列表中 仅 那些人的约会,只是 至少所有 那些人。
在这种情况下,我想以下应该可行:
BooleanBuilder personClause = new BooleanBuilder();
for (Person person : personList)
{
personClause.and(appointment.persons.contains(person));
}
query.where(personClause); // to add the clause