Как я могу использовать JPA для поиска подстроки в поле? - PullRequest
5 голосов
/ 14 ноября 2011

Мое приложение использует JPA для доступа к базе данных бэкэнда.

У меня есть класс Java, сопоставленный с таблицей.Класс имеет строковое поле (называемое status), которое состоит из серии «0» и «1».Мне нужно выбрать несколько записей на основе второго символа поля.Вот что я могу сделать без использования JPA (я использую MS SQLServer).

SELECT * FROM Machines where SUBSTRING(status, 2, 1) = '1'

Как я могу сделать это с помощью JPA?

Ответы [ 3 ]

9 голосов
/ 14 ноября 2011

В JPA есть функция SUBSTRING:

http://download.oracle.com/otn-pub/jcp/persistence-2.0-fr-eval-oth-JSpec/persistence-2_0-final-spec.pdf

4.6.17.2.1 "Строковые функции"

(...)

SUBSTRING (string_primary, simple_arithmetic_expression [, simple_arithmetic_expression])

(...)

Второй и третий аргументы функции SUBSTRING обозначают начальныйпозиция и длина возвращаемой подстроки.Эти аргументы являются целыми числами.Третий аргумент не является обязательным.Если он не указан, возвращается подстрока от начальной позиции до конца строки.Первая позиция строки обозначена 1. Функция SUBSTRING возвращает строку.

4 голосов
/ 14 ноября 2011

JPQL также имеет функцию SUBSTRING(..): см. Здесь . Так что это будет так же, как в собственном запросе.

Когда JPA не поддерживает какую-то нужную вам функцию, вы можете сделать собственный запрос и отобразить результат в pojo.

2 голосов
/ 03 мая 2013

JPQL имеет функцию подстроки, которую можно использовать для обрезки сущностей.Убедитесь, что вы используете имена объектов в своем запросе, а также обратите внимание, что функция подстроки не имеет нулевого индекса .

SELECT * FROM Machines m where SUBSTRING(m.status, 2, 1) = '1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...