1

我有一个FamilyAdvertisementJPA 实体,它有一个集合/集合ChildcareType的枚举,如下所示:

@ElementCollection
private Set<ChildcareType> childcareTypes;

这是枚举:

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

我想要,给定作为参数传递的所需 ChildcareTypes 的集合/集,以仅匹配具有相同 ChildcareTypes 集的那些familyAdvertisements。

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

SINGLE不会返回带有 only 的实例。

SINGLE另一个带有,SHARED的实例BABY_SITTING不会被返回。

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

有人可以帮忙吗?

4

1 回答 1

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方法,因为大多数后端不支持它。

于 2013-04-02T16:46:07.670 回答