小编Hen*_*len的帖子

使用ParameterExpression与JPA Criteria API中的变量

使用JPA Criteria API时,直接对变量使用ParameterExpression有什么好处?例如,当我希望在String变量中按名称搜索客户时,我可以编写类似的内容

private List<Customer> findCustomer(String name) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Customer> criteriaQuery = cb.createQuery(Customer.class);
    Root<Customer> customer = criteriaQuery.from(Customer.class);
    criteriaQuery.select(customer).where(cb.equal(customer.get("name"), name));
    return em.createQuery(criteriaQuery).getResultList();
}
Run Code Online (Sandbox Code Playgroud)

使用参数,这变为:

private List<Customer> findCustomerWithParam(String name) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Customer> criteriaQuery = cb.createQuery(Customer.class);
    Root<Customer> customer = criteriaQuery.from(Customer.class);
    ParameterExpression<String> nameParameter = cb.parameter(String.class, "name");
    criteriaQuery.select(customer).where(cb.equal(customer.get("name"), nameParameter));
    return em.createQuery(criteriaQuery).setParameter("name", name).getResultList();
}
Run Code Online (Sandbox Code Playgroud)

为了简洁起见,我更倾向于第一种方式,特别是当查询使用可选参数变得更长时.使用像SQL这样的参数有什么缺点吗?

java api jpa criteria

13
推荐指数
1
解决办法
1万
查看次数

在JPA中阻止N + 1选择

我有JPA实体订单与Customer的ManyToOne关系.它是双向的,因此Customer也有一个OneToMany字段订单.这两个关系都使用EAGER获取(或者在OpenJPA fetchplan中).

当我从Order中选择时,我得到1个订单选择,N选择Customer.orders字段.令我惊讶的是,OpenJPA,EclipseLink和Hibernate存在这个问题,即使我使用JOIN FETCH(它在单向情况下也能工作).

有没有好办法解决这个问题?有没有解决更复杂图形的N + 1选择问题的解决方案?

编辑:我自己的研究结果: - 对于OpenJPA(我正在使用)我还不知道解决方案 - 对于Hibernate @Fetch(FetchMode.SUBSELECT)解决了这个问题.使用@BatchSize也有帮助,它同时选择给定数量的customer.orders字段. - 对于EclipseLink,我发现了类似的功能@BatchFetch(value = BatchFetchType.IN),但在这种情况下没有帮助,我想它无法在双向关系中有效地处理这个问题.

java sql performance jpa

6
推荐指数
1
解决办法
1万
查看次数

为什么不是java RuntimeException调用UncheckedException?

为什么Java语言设计者使用术语"RuntimeException"?这个坏术语不是吗?我的意思是在运行时会发生任何异常,无论是检查异常(例如IOException)还是未经检查的异常.

如果他们创建CheckedException和UncheckedException都延长了Throwable,那会不会更好?

java

1
推荐指数
1
解决办法
158
查看次数

标签 统计

java ×3

jpa ×2

api ×1

criteria ×1

performance ×1

sql ×1