我有2个实体A,B。A包含一个Set,我需要在QueryService中按B的字段X进行过滤。
我看到了谓词,但是我不知道如何使用它。
StringFilter lf = new StringFilter(); lf.setEquals(value);
return (root, query, builder) -> {
Predicate p = builder.in(expression);
return builder.and(p);
};
“表达式”中放了什么????获得类似的东西:
SELECT * FROM A WHERE
A.id in (select b.id_A from b where b.code_field ='alfacentauri')
谢谢!
答案 0 :(得分:2)
您应该以这种方式在内部谓词中使用gid
Subquery
另一种方法是使用return (root, query, builder) -> {
Subquery<Long> subquery = query.subquery(Long.class); // if b.id_A has Long type
Root<B> subRoot = subquery.from(B.class);
final Predicate codeFieldPredicate =
builder.equal(subRoot.get("code_field"), "alfacentauri");
subquery.select(subRoot.get("id_A")).where(codeFieldPredicate);
return builder.in(root.get("id")).value(subquery);
}
谓词
exists
它生成了一些不同的查询,但是结果将与预期的一样