gpt4 book ai didi

java - 具有多个参数的 JPA 标准 API

转载 作者:IT老高 更新时间:2023-10-28 21:02:04 26 4
gpt4 key购买 nike

我需要创建一个使用带有多个参数的 JPA Criteria API 的搜索方法。现在的问题是并非每个参数都是必需的。所以有些可能是空的,它们不应该包含在查询中。我已经用 CriteriaBuilder 尝试过这个,但我不知道如何让它工作。

使用 Hibernate Criteria API,这相当容易。只需创建条件,然后添加限制。

Criteria criteria = session.createCriteria(someClass.class);
if(someClass.getName() != null) {
criteria.add(Restrictions.like("name", someClass.getName());
}

如何使用 JPA 的 Criteria API 实现相同的目标?

最佳答案

概念是构造javax.persistence.Predicate的数组其中仅包含我们要使用的谓词:

要查询的示例实体:

@Entity
public class A {
@Id private Long id;
String someAttribute;
String someOtherAttribute;
...
}

查询本身:

    //some parameters to your method
String param1 = "1";
String paramNull = null;

CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery cq = qb.createQuery();
Root<A> customer = cq.from(A.class);

//Constructing list of parameters
List<Predicate> predicates = new ArrayList<Predicate>();

//Adding predicates in case of parameter not being null
if (param1 != null) {
predicates.add(
qb.equal(customer.get("someAttribute"), param1));
}
if (paramNull != null) {
predicates.add(
qb.equal(customer.get("someOtherAttribute"), paramNull));
}
//query itself
cq.select(customer)
.where(predicates.toArray(new Predicate[]{}));
//execute query and do something with result
em.createQuery(cq).getResultList();

关于java - 具有多个参数的 JPA 标准 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com