как использовать регулярное выражение в EJB именованном запросе - PullRequest
1 голос
/ 30 октября 2010

У меня есть запрос в MySQL, как

ВЫБРАТЬ СЧЕТ (ОТЛИЧНЫЙ МОБИЛЬ) ОТ TBLM_CUSTOMER, ГДЕ МОБИЛЬ НЕ РЕГЭКСПИРУЕТ '^ 00 * 0 $' И ДЛИНА (МОБИЛЬНАЯ)> = 10;

Я использую EJB 3.0 и хочу сделать такой же запрос с помощью NamedQuery, то же самое возможно с помощью createQuery, но я хочу использовать NamedQuery.

Можно ли использовать регулярное выражение с использованием NamedQuery в EJB 3.0?

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

Прежде всего, 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, чтобы сохранить ваши запросы переносимыми?

0 голосов
/ 25 ноября 2010

ВЫБЕРИТЕ СЧЕТЧИК (ОТЛИЧИТЕЛЬНЫЙ o.MOBILE) ОТ Клиента, ГДЕ o.MOBILE! = '^ 00 * 0 $' И ДЛИНА (o.MOBILE)> = 10;

, где Customer является компонентом нашей сущности,работа с запросами хороша как nativequery в EJB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...