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…
で、少し違和感はあります。もっとちゃんとした解決方法があるのかもしれません。