読者です 読者をやめる 読者になる 読者になる

Web系開発メモ

Java, SpringBoot, JavaScript, CSS, HTML などの記事を書いています。

SpringBoot:findAllOrderBy…Desc のエラー対応

Spring Boot

Spring JPAリポジトリを作成したら、アプリ起動時にエラーが発生しました。今回はそのエラーと対応方法について書いていきます。

リポジトリのコード

次のリポジトリを作成しました。

public interface UserRepository extends PagingAndSortingRepository<User, Long> {
    Page<User> findAllOrderByIdDesc(Pageable page);
}

エラー内容

Spring Boot の起動時に、次のエラーが出力されました。

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
(省略)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property desc found for type long! Traversed path: User.id.
(省略)
    ... 100 more

UserRepository が作成できない、といった感じです。

原因

リポジトリfindAllOrderBy…Desc というメソッドを定義しているのが原因みたいです。

対応方法

メソッド名を次のように変更したら、エラーが発生しなくなりました。

public interface UserRepository extends PagingAndSortingRepository<User, Long> {
    Page<User> findAllByOrderByIdDesc(Pageable page);
}

findAllBy…By… で、少し違和感はあります。もっとちゃんとした解決方法があるのかもしれません。

参考文献

Order By Date Desc with Spring Data - stackoverflow.com