Как использовать JpaSort в Spring Data, чтобы возвращать нули последними?

В настоящее время я использую такую ​​конструкцию для сортировки:

new JpaSort( JpaSort.path( Datasheet_.componentSubtype )
                    .dot( ComponentSubtype_.componentType )
                    .dot( ComponentType_.name ) )
                    .and( new JpaSort( JpaSort.path( Datasheet_.componentSubtype )
                                              .dot( ComponentSubtype_.name ) ) )

Я видел в этом ответе, что API-интерфейс Hibernate Critaria позволяет это, но хотел бы использовать JPA.

2
Wim Deblauwe 27 Май 2014 в 23:24

2 ответа

Лучший ответ

Короткий ответ: вы не можете, поскольку JPA (читай: ни Criteria API, ни JPQL) не определяет средства для определения порядка сортировки для null s.

Возможно, вы захотите использовать Querydsl в качестве альтернативы нашему соответствующая абстракция предоставляет необходимый API для определения этого. Обратите внимание, однако, что Querydsl использует специальные расширения поставщика сохраняемости для сгенерированного JPQL

3
Oliver Drotbohm 28 Май 2014 в 12:43
Я использую MySQL для этого конкретного проекта, я полагаю, что это будет поддерживаться?
 – 
Wim Deblauwe
28 Май 2014 в 15:17
Я не пробовал, но важным шагом является не база данных, а то, поддерживает ли поставщик постоянства (Hibernate, EclipseLink и т. д.) выражения запроса в целом. Я предполагаю, Querydsl предполагает, что они это делают, поэтому реализуют функциональность.
 – 
Oliver Drotbohm
28 Май 2014 в 17:08
Пытаюсь реализовать это сейчас, но застрял. Задал здесь отдельный вопрос: stackoverflow.com/questions/27502137/…
 – 
Wim Deblauwe
16 Дек 2014 в 13:21

Если вы используете Spring Data Pageable в контроллере Spring MVC таким образом

@RequestMapping(method = RequestMethod.GET) public Page<Address> list(Pageable pageable) {...}

И вы используете MySql, эти параметры URL могут помочь

?page=0&size=100&sort=isnull(streetLine2)&sort=streetLine2,desc
2
Andrii Karaivanskyi 24 Фев 2015 в 23:01
Пауза для аплодисментов. Спасибо!
 – 
Augusto Altman Quaranta
15 Июл 2016 в 05:20
2
Я попробовал это, и я получил org.springframework.data.mapping.PropertyReferenceException, говорящий: «Нет свойства isnull (имя) для типа XYZ». Похоже, что он ищет isnull(name) в XYZ вместо того, чтобы проверять, является ли name нулевым. Любая подсказка? Спасибо! Версия jpa данных Spring — 1.11.7, а БД — mysql.
 – 
user765635
31 Окт 2017 в 16:04