Java Criteria API 类似条件

标签 java sql jpa sql-like criteria

我需要用 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,否则按 channel 和客户端进行的过滤工作正常。

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

最佳答案

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

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

关于Java Criteria API 类似条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795344/

相关文章:

java - 如何以无配置方式将可选任务 sshexec 加载到 Ant 中?

java - 为什么这个序列生成器不在 Spring Boot 中创建数据库表?

java - 对于 Apache Collections4 Multikey,未经检查的调用意味着什么以及如何修复它?

java - 将 WebEnv 和 QueryKey 示例用于 EFetch 时出现 ADBException

sql - 如何在 Azure Synapse 无服务器 SQL 池中使用 CETAS 创建外部表时添加自动递增列?

mysql - 如何将时间列分别分组为 5 分钟间隔和最大/最小值 SQL?

spring - Eclipse RCP、Spring、Hibernate 类加载问题

hibernate - PostgisDialect 与 PostgreSQLDialect 或两者兼而有之?

java - android.widget.ImageView 无法转换为 com.parse.ParseImageView

mysql - 在数据库中存储游戏玩家进度 I​​D - MySQL 中的逗号分隔数据与规范化 MySQL 记录(关于服务器性能)