java方法criterion_java – 具有多个参数的JPA Criteria API

我需要创建一个使用带有多个参数的JPA Criteria API的搜索方法.

现在的问题是不是每个参数都是必需的.所以有些可能为null,它们不应包含在查询中.我已经用CriteriaBuilder尝试了这个,但我看不出如何让它工作.

使用Hibernate Criteria API,这非常简单.只需创建条件,然后添加限制.

Criteria criteria = session.createCriteria(someClass.class);

if(someClass.getName() != null) {

criteria.add(Restrictions.like("name", someClass.getName());

}

我怎么能用JPA的Criteria API实现同样的目标?

解决方法:

要查询的示例实体:

@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 customer = cq.from(A.class);

//Constructing list of parameters

List predicates = new ArrayList();

//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();

标签:criteria-api,java,jpa

来源: https://codeday.me/bug/20190925/1817375.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值