OrderBy приводит к ошибке со старыми данными Spring

Я хотел написать метод, который возвращает разбитый на страницы и отсортированный список сущностей, и я надеялся, что Spring Data сможет получить запрос непосредственно из имени метода. Следующее определение репозитория из общего модуля хорошо работает при использовании в одном модуле и завершается ошибкой "Ошибка инициализации контекста" при использовании в другом.

@Repository
public interface AppleDao extends JpaRepository<Apple, Long> {
    Page<Apple> getAllByVarietyEqualsOrderById(Variety variety, Pageable pageable);
}

Первый модуль новее и зависит от Spring Data JPA 1.11.0 + Spring Data Commons 1.13.0. Второй модуль старше и зависит от Spring Data JPA 1.6.2 + Spring Data Commons 1.8.2.

Вот кусок журналов:

SEVERE: Context initialization failed
org.springframework.beans.factory.BeanCreationException:
    Error creating bean with name 'appleServiceImpl': Injection of autowired dependencies failed;
    nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private by.naxa.dao.apple.AppleDao by.naxa.services.apple.AppleServiceImpl.appleDao;
    nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appleDao': Invocation of init method failed;
    nested exception is java.lang.IllegalArgumentException: Could not create query metamodel for method public abstract org.springframework.data.domain.Page by.naxa.dao.apple.AppleDao.getAllByVarietyEqualsOrderById(by.naxa.entity.apple.Variety,org.springframework.data.domain.Pageable)!
    Invalid order syntax for part Id

Как переписать этот метод, чтобы он работал во всех версиях Spring Data без ошибок?

1 ответ

Не нужно ничего переписывать, просто укажите явный порядок сортировки (Asc или же Desc):

@Repository
public interface AppleDao extends JpaRepository<Apple, Long> {
    Page<Apple> getAllByVarietyEqualsOrderByIdAsc(Variety variety, Pageable pageable);
}

Вы столкнулись с этой ошибкой из-за DATACMNS-641 (исправлено в Spring Data Commons 1.10).

Другие вопросы по тегам