Spring Dataリポジトリにメソッドを定義して、日付順に並べられたテーブルの最後のレコードを取得しようとしています。これは私のエンティティです:
@Entity
public class News {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String text;
private Date publicationDate;
/* Getters and Setters */
}
そして、これは私のリポジトリです:
public interface NewsRepository extends JpaRepository<News, Long> {
List<News> findFirst5OrderByPublicationDateDesc();
}
プロジェクトの起動を使用しようとすると、次のエラーが表示されます。
原因:org.springframework.data.mapping.PropertyReferenceException:タイプDateのプロパティディスクが見つかりません!通過したパス:News.publicationDate。
そして、Descを削除すると、これが得られます:
原因:Java.util.NoSuchElementException
私が間違っているのは何ですか?
メソッドの署名が間違っていたことがわかりました。正しいものは:
findFirst5ByOrderByPublicationDateDesc()
公式サンプルでは次のようになっているため、少し混乱しています。
List<User> findTop10ByLastname(String lastname, Pageable pageable);
ご覧のとおり、たった1つしかありません。
Spring JPaRepositoryにはページネーションがあり、これは非常に役立ちます。これも完全に機能します
カスタムのページング可能オブジェクトを作成する
Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "id");
Page<News> topPage = newsRepository.findByPublicationDate(id, pageable);
List<News> topUsersList = topPage.getContent();
NewsRepositoryインターフェースで、必ずメソッドを作成してください
Page<News> findByPublicationDate(Date date, Pageable pageable);
これにより、上位のレコードが返されます。
Pageable pageable = new PageRequest(0, 10, Sort.Direction.DESC, "id");
Page<News> bottomPage = newsRepository.findByPublicationDate(id, pageable);
// this is a list of the last 10 records, you can choose to invert it by using
List<News> bottomUsersList = bottomPage.getContent();
Collections.inverse(bottomUsersList);
これは同じNewsRespoitoryを再利用するため、そこで別のメソッドを作成する必要はありません。
ページを使用する利点は、別の列で並べ替えることが柔軟になることです。 (ASCまたはDESCのいずれか)
// To get top by text
Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "text");
// Top by title
Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "title");
// Top by publicationDate
Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "publicationDate");
10は、必要な数のレコードで置き換えることができます