Мой названный запрос довольно длинный из-за использования Like с OR, поскольку дерево объектов довольно велико. Можем ли мы использовать Like и In вместе в Named Query:
#Mysql
@NamedQuery(name="getDhahush", query="SELECT d.pid FROM Dhahush d WHERE lower(d.person.telephon.mobile.mobno) LIKE lower('78129%') OR lower(d.person.telephon.mobile.mobno) LIKE lower('8129%') OR lower(d.person.telephon.mobile.mobno) LIKE lower('5159%')")
Базовая база данных - это MySQL.
Вместо этого используйте ЛЮБОЙ.
В PostgreSQL ваш запрос будет примерно таким:
select 'foo' like any(array['f%', '%o%', '&t']);
MySQL не поддерживает этот точный синтаксис, но вы можете сделать что-то подобное с подзапросом:
select 'foo' like any( select 'f%' union select '%o%' union select '&t');
LIKE не может использоваться в сочетании с IN
e.g.
mobno LIKE IN ('781%','719%')
Но я бы удалил нижний из нижнего (d.person.telephon.mobile.mobno), потому что, во-первых, это число и не требует меньше, а во-вторых, и что самое главное, функция lower() не сможет использовать какой-либо индекс уже на месте на колонке "mobno" Cheers.