小编Luk*_*sko的帖子

为什么Hibernate内联传递给JPA Criteria Query的整数参数列表?

我正在使用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)

java hibernate jpa prepared-statement criteria-api

10
推荐指数
2
解决办法
3263
查看次数

标签 统计

criteria-api ×1

hibernate ×1

java ×1

jpa ×1

prepared-statement ×1