类似于Java标准API的条件



我需要在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+"%") 
);

当地址过滤器"search"变量有任何值时,列表返回null,否则按通道和客户端过滤工作完美。

我没能在我的CriteriaQuery中实现LIKE过滤选项。我还应该使用其他方法或提示吗?

也许可以尝试在通配符上使用星号,如下所示:

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

最新更新