Использование API критериев JPA2 для запроса подмножества строк - PullRequest
3 голосов
/ 18 апреля 2011

Я обновляю API Hibernate Criteria до API JPA2 Criteria и сталкиваюсь со следующей проблемой, которую, похоже, не могу решить.

В Критериях гибернации я использовал Restrictions.sqlRestriction для проверки определенного типа подмножества строк:

criteria.add(Restrictions.sqlRestriction("{alias}.location_key = left((?), length({alias}.location_key))", searchObj.getLocationKey(), Hibernate.STRING));

По сути, это проверяет, что первые N буквы входной строки соответствуют ключу location_key, длина которого N букв. То есть входная строка Canada,ON должна соответствовать чему-либо вроде: Canada, или Can или C.

Проблема в том, что JPA2 не позволяет нам так кодировать нативный sql, и я не уверен, как можно добиться чего-то подобного без функции left (которая, я думаю, может быть специфичной для mysql).

Любая помощь приветствуется!

1 Ответ

1 голос
/ 27 апреля 2011

Я не уверен, как именно работает ваш запрос, но разве вы не сможете использовать CriteriaBuilder.substring (Expression, int) вместо LEFT ()? Я мог бы прийти с лучшими идеями, если вы предоставите фактический SQL, который хотите генерировать.

...