我有一个FamilyAdvertisement
JPA实体,其中包含ChildcareType
个枚举的集合/集合,如下所示:
@ElementCollection
private Set<ChildcareType> childcareTypes;
这是枚举:
public enum ChildcareType {
SINGLE, SHARED, OUT_OF_SCHOOL, BABY_SITTING;
}
我希望,给定一组所需的ChildcareTypes作为参数传递,以匹配那些具有相同ChildcareTypes集的familyAdvertisements。
我们举一个例子:假设只有FamilyAdvertisement
的三个实例具有以下SINGLE
和SHARED
的集合。我只想通过QueryDSL查询返回这三个实例。
仅返回SINGLE
的实例。
不会返回SINGLE
,SHARED
和BABY_SITTING
的另一个实例。
我无法找到相关运算符来比较传入的参数(Set<ChildcareType> requiredChildcareTypes
)和以下SetPath
:QFamilyAdvertisement.familyAdvertisement.childcareTypes
有人可以帮忙吗?
答案 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
方法,因为大多数后端都不支持它。