【问题标题】:Strict comparison of an @ElementCollection of enums in db and a Set of enums using QueryDSLdb 中枚举的 @ElementCollection 和使用 QueryDSL 的一组枚举的严格比较
【发布时间】:2023-03-10 13:35:01
【问题描述】:

我有一个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&lt;ChildcareType&gt; requiredChildcareTypes)和下面的SetPathQFamilyAdvertisement.familyAdvertisement.childcareTypes

有人可以帮忙吗?

【问题讨论】:

    标签: querydsl


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多