Java Criteria API类似条件

问题描述 投票:1回答:1

我需要在Java中构建一个动态查询(带有可选的过滤参数和条件)。我决定选择Criteria API,因为它似乎是最灵活的方法。

我想要实现的条件示例(Mysql透视图):

WHERE idClient = X AND ( idChannel = 1 OR idChannel = 2 OR idChannel = 25) AND filter LIKE '%test%'

参数“criteria”是具有idChannel过滤器的谓词列表,创建如下:

//Filter by channel
for (Channel channel : channels){
   Predicate channelFilter = qb.equal(address.get(AddressBlocked_.idChannel), channel);
   criteria.add(channelFilter);
}

我使用Criteria API(Java透视图)编写的条件:

Predicate predicate = qb.and(
      //Client filter
      qb.equal(address.get(AddressBlocked_.idClient), idClient),

      //Channel filter
      qb.or(
            criteria.toArray(new Predicate[criteria.size()])
      ),

      //Address filter
      qb.like(address.get(AddressBlocked_.address), "%"+search+"%") 
);

每当地址过滤器“搜索”变量具有任何值时,列表返回null,否则通道和客户端的过滤工作完美。

我无法在CriteriaQuery中实现LIKE过滤选项。我应该使用或提示的任何其他方法?

java sql jpa sql-like criteria
1个回答
1
投票

也许尝试使用星号作为通配符,如下所示:

http://docs.oracle.com/javaee/6/tutorial/doc/gjivm.html

© www.soinside.com 2019 - 2024. All rights reserved.