使用QueryDSL严格比较db中的@ElementCollection枚举和一组枚举

时间:2013-03-31 13:58:19

标签: querydsl

我有一个FamilyAdvertisement JPA实体,其中包含ChildcareType个枚举的集合/集合,如下所示:

@ElementCollection
private Set<ChildcareType> childcareTypes;

这是枚举:

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

我希望,给定一组所需的ChildcareTypes作为参数传递,以匹配那些具有相同ChildcareTypes集的familyAdvertisements。

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

仅返回SINGLE的实例。

不会返回SINGLESHAREDBABY_SITTING的另一个实例。

我无法找到相关运算符来比较传入的参数(Set<ChildcareType> requiredChildcareTypes)和以下SetPathQFamilyAdvertisement.familyAdvertisement.childcareTypes

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

表达它的一种高级方式就是这样

query.from(familyAdvertisement)
     .where(
         familyAdvertisement.childcareTypes.contains(SINGLE),
         familyAdvertisement.childcareTypes.contains(SHARED),
         familyAdvertisement.childcareTypes.size().eq(2))
     .list(familyAdvertisement);

您需要动态填充where部分。

如果您想要更多地控制生成的SQL,请使用contains行的左连接或存在子句,size eq行不存在。

CollectionExpressions不提供eq方法,因为大多数后端都不支持它。