Прежде всего, REGEXP - это не стандартная функция JPQL, определенная JPA, а специфичный для платформы SQL.Если он работает с вашим текущим поставщиком JPA (некоторые из них могут передавать специфический для платформы SQL в предложении WHERE непосредственно в базу данных, некоторые из них могут поддерживать расширение заданного диалекта), переносимость не гарантируется (если это имеет значение).
При этом, если бы вы заставили его работать, используя createQuery(String)
, нет никаких причин, по которым он не будет работать с NamedQuery
.Вы пробовали что-то вроде этого:
SELECT COUNT(DISTINCT MOBILE) FROM TBLM_CUSTOMER WHERE MOBILE NOT REGEXP :regexp AND LENGTH(MOBILE) >= :length;
PS: Возможно, это всего лишь пример, но почему бы вам не использовать [NOT] LIKE
, чтобы сохранить ваши запросы переносимыми?