oracle - JPA/标准 API - NotLike

标签 oracle jpa-2.0 predicate

我想使用 Predicate notLike(Expression x, String pattern) 来替换以下查询:

select * from mytable
where mytable.myParameter not in ('ABC%','XYZ');

但是当我使用以下谓词执行查询时:

Predicate notLike = builder.notLike(fromMyTable.get(MyTable_.myParameter), "ABC%|BCD");

不工作。

但是如果我为两个字符串创建 2 个谓词:“ABC%”和“XYZ”就可以工作。

是我的模式写错了还是问题出在哪里?我尝试了很多方法来改变模式,但仍然不起作用。

谢谢!

最佳答案

在 SQL 中,“not in (X,Y,Z)”谓词是以下条件的快捷方式:

A <> X AND A <> Y AND A <> Z

此条件使用“不等于”运算符,比较操作数是否完全不相等
不能使用 INNOT IN 运算符进行模式匹配。
您必须使用支持模式匹配的 LIKE 运算符重写查询:

select * from mytable
where mytable.myParameter not in ('XYZ')
  and mytable.myParameter not LIKE 'ABC%';

select * from mytable
where mytable.myParameter <> 'XYZ'
  and mytable.myParameter not LIKE 'ABC%';

关于oracle - JPA/标准 API - NotLike,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353992/

相关文章:

SpringPersistenceUnitInfo::AbstractMethodError

java - EntityManagerEntityManager.persist(employee) 不将记录保存在数据库表中

sql - 返回基于 a 的条目包含带有 sql 的谓词

sql - 列别名引用

在查询中使用子项计数时 Hibernate 生成的 MySQLSyntaxErrorException

java - ORA-00942 Hibernate 出现 SQLException(无法找到表)

list - 如何实现 not_all_equal/1 谓词

java - 在 Java 8 中创建通用谓词

windows - SQLDeveloper 不会启动

sql - 简化嵌套查询