对数据库中包含枚举的@ElementCollection和使用QueryDSL的一组枚举进行严格比较



我有一个FamilyAdvertisement JPA实体,它有ChildcareType的枚举集合/集合如下:

@ElementCollection
private Set<ChildcareType> childcareTypes;

这是枚举:

public enum ChildcareType {
    SINGLE, SHARED, OUT_OF_SCHOOL, BABY_SITTING;
}

我想,给定一个所需的ChildcareTypes集合/集合作为参数传递,只匹配那些具有相同ChildcareTypes集合的familyads。

让我们举一个例子:假设只有三个FamilyAdvertisement的实例有以下SINGLESHARED的集合。我希望QueryDSL查询只返回这三个实例。

只有SINGLE的实例将不会返回。

将不返回SINGLE, SHAREDBABY_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方法,因为大多数后端不支持。

最新更新