Java JPA in子句使用规范-JHipster方法
我有两个实体A,B。A包含一个集合,我需要在QueryService中通过字段X或B进行过滤 我看到谓词,但我不知道如何使用它Java JPA in子句使用规范-JHipster方法,java,hibernate,jpa,spring-data-jpa,jhipster,Java,Hibernate,Jpa,Spring Data Jpa,Jhipster,我有两个实体A,B。A包含一个集合,我需要在QueryService中通过字段X或B进行过滤 我看到谓词,但我不知道如何使用它 StringFilter lf = new StringFilter(); lf.setEquals(value); return (root, query, builder) -> { Predicate p = builder.in(expression); return buil
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')
谢谢 您应该这样使用
子查询内部谓词
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);
}
它生成一个稍有不同的查询,但结果将与预期的一样您应该以这种方式在谓词内部使用子查询
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);
}
它会生成一个稍有不同的查询,但结果将与预期的一样谢谢。它工作!!!(Jhipster使用SingularAttribute而不是che fieldname)谢谢。它工作!!!(Jhipster使用SingularAttribute而不是che fieldname)