Например, в Hibernate вы можете использовать функцию LOWER для p.name в ORDER BY:
select p from Plan as p where p.location = :location order by LOWER(p.name)
Я предполагаю, что выше не гарантируется работа со всеми реализациями JPA, потому что аргумент ORDER BY не является одним из следующих:
- State_field_path_expression, которое оценивается как поле состояния, которое можно заказать, или
Тип абстрактной схемы встраиваемого класса, указанный в предложении SELECT одним из следующих способов:
• переменная general_identification_variable
• single_valued_object_path_expression
- state_field_path_expression, которое оценивает одно и то же поле состояния того же объекта или
встраиваемый тип абстрактной схемы в виде выражения state_field_path_ex в предложении SELECT
- result_variable, который ссылается на заказываемый элемент в предложении SELECT, для которого тот же
переменная result_variable была указана. Это может быть результатом выражения aggregate_expression,
scalar_expression или state_field_path_expression в предложении SELECT.
Например, четыре запроса ниже являются законными.
Если он не работает с используемой реализацией JPA, вам нужно использовать следующий запрос:
select p, LOWER(p.name) AS name_order
from Plan as p
where p.location = :location order by name_order
Недостатком является то, что результатом запроса является список массивов объектов, причем первый элемент в каждом списке является экземпляром объекта Plan, а второй элемент должен быть отброшен.