我正在使用JPA Criteria API构建查询.当我使用javax.persistence.criteria.Path#in(Collection<?>)
方法创建两个限制谓词时,生成的SQL查询与我所考虑的有点不同.
构建在int
属性上的第一个谓词产生了SQL,内联参数集合的所有元素:in (10, 20, 30)
.
构建在String
属性上的第二个谓词产生了参数化的SQL : in (?, ?, ?)
.
让我展示:
实体:
@Entity
public class A {
@Id
private Integer id;
private int intAttr;
private String stringAttr;
//getter/setters
}
Run Code Online (Sandbox Code Playgroud)
查询:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<A> q = cb.createQuery(A.class);
Root<A> root = q.from(A.class);
q.where(
root.get("intAttr").in(Arrays.asList(10, 20, 30)),
root.get("stringAttr").in(Arrays.asList("a", "b", "c"))
);
entityManager.createQuery(q).getResultList();
Run Code Online (Sandbox Code Playgroud)
日志:
select
a0_.id as id1_0_,
a0_.intAttr as intAttr2_0_,
a0_.stringAttr as stringAt3_0_
from
A a0_
where
(
a0_.intAttr …
Run Code Online (Sandbox Code Playgroud)