gpt4 book ai didi

java - JPQL check in parameter not null 然后执行查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:42 24 4
gpt4 key购买 nike

我有一些参数可以为空,也可以不为空。

我想做的是仅使用不为空的参数执行查询。

例如我有:

String param1;
String param2;

我想做这样的事情:

 If ( param1 != null && param2 != null ) {
Query q = em.createQuery("SELECT a FROM Advert where a.property = param1 and a.property2= param2);
}

if( param1 == null && param2 != null ) {
Query q = em.createQuery("SELECT a FROM Advert where a.property2= param2")
}

if( param1 != null && param2 == null ) {
Query q = em.createQuery("SELECT a FROM Advert where a.property= param1");
}

是否可以不使用 if 语句来做到这一点 但使用 jpql 查询字符串?(因为我有两个以上的参数,检查这么多情况不是很方便)

最佳答案

你可以有这样的东西:

        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Advert> query = criteriaBuilder.createQuery(Advert.class);
Root<Advert> advertRoot = query.from(Advert.class);
query.select(advertRoot);
List<Predicate> criteria = new ArrayList<Predicate>();
if(property != null){
ParameterExpression<String> p =
criteriaBuilder.parameter(String.class, "property");
criteria.add(criteriaBuilder.equal(advertRoot.get("property"), p));
}
if(property1 != null){
ParameterExpression<String> p =
criteriaBuilder.parameter(String.class, "property1");
criteria.add(criteriaBuilder.equal(advertRoot.get("property1"), p));
}
if (criteria.size() == 0) {
throw new RuntimeException("no criteria");
} else if (criteria.size() == 1) {
query.where(criteria.get(0));
} else {
query.where(criteriaBuilder.and(criteria
.toArray(new Predicate[0])));
}
TypedQuery<Advert> q = em.createQuery(query);
//set your query parameters here
if (property != null) { q.setParameter("property", property); }
if (property1 != null) { q.setParameter("property1", property1); }
List<Advert> resultList = q.getResultList();

关于java - JPQL check in parameter not null 然后执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26689717/

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