JPA / Criteria API - NotLike - PullRequest
       12

JPA / Criteria API - NotLike

0 голосов
/ 16 сентября 2018

Я хочу использовать Predicate notLike (выражение x, шаблон String) для замены следующего запроса:

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

Но когда я выполняю свой запрос, используя следующий предикат:

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

не работает.

Но если я создаю 2 предиката для обеих строк: «ABC%» и «XYZ» работают.

Мой шаблон написан неправильно или в чем проблема? Я пытался изменить шаблон во многих отношениях, но все еще не работает.

Спасибо!

1 Ответ

0 голосов
/ 16 сентября 2018

В SQL A not in (X,Y,Z) предикат является сокращением для следующего условия:

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

это условие использует операторы "не равны", которые сравнивают операнды для точного неравенства .
Нельзя использовать операторы IN или NOT 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%';
...