我有一个FamilyAdvertisement
JPA实体,它有ChildcareType
的枚举集合/集合如下:
@ElementCollection
private Set<ChildcareType> childcareTypes;
这是枚举:
public enum ChildcareType {
SINGLE, SHARED, OUT_OF_SCHOOL, BABY_SITTING;
}
我想,给定一个所需的ChildcareTypes集合/集合作为参数传递,只匹配那些具有相同ChildcareTypes集合的familyads。
让我们举一个例子:假设只有三个FamilyAdvertisement
的实例有以下SINGLE
和SHARED
的集合。我希望QueryDSL查询只返回这三个实例。
只有SINGLE
的实例将不会返回。
将不返回SINGLE
, SHARED
和BABY_SITTING
的另一个实例。
我无法找到相关的运算符来比较传入参数(Set<ChildcareType> requiredChildcareTypes
)和以下SetPath
: QFamilyAdvertisement.familyAdvertisement.childcareTypes
有人能帮忙吗?
一个高层次的表达方式是这样的
query.from(familyAdvertisement)
.where(
familyAdvertisement.childcareTypes.contains(SINGLE),
familyAdvertisement.childcareTypes.contains(SHARED),
familyAdvertisement.childcareTypes.size().eq(2))
.list(familyAdvertisement);
您需要动态地填充where部分。
如果您希望对结果SQL有更多的控制,请对contains
行使用左连接或exist子句,对size eq
行使用not exists子句。
CollectionExpressions不提供eq
方法,因为大多数后端不支持。