1. ホーム
  2. java

結合と行ベースの制限(ページング)を使用して、hibernateで明確な結果を得るにはどうすればよいですか?

2023-10-23 03:11:45

質問

行ベースの制限を使用してページングを実装しようとしています(例えば。 setFirstResult(5)setMaxResults(10) ) を他のテーブルへの結合を持つ Hibernate Criteria クエリ上で使用することができます。

当然ながら、データはランダムに切断されます。その理由を説明します。 ここで .

解決策として、このページでは、結合の代わりに "2番目のSQL select" を使用することを提案しています。

既存の基準クエリ (このクエリには createAlias() を使用した結合があります) を、代わりにネストされた select を使用するように変換するにはどうすればよいですか?

どのように解決するのですか?

個別のハイドレイトされたオブジェクトのリストではなく、個別のIDのリストを要求することによって望ましい結果を達成することができます。

単にこれを基準に追加してください。

criteria.setProjection(Projections.distinct(Projections.property("id")));

これで、行ベースの制限にしたがって正しい数の結果が得られるようになります。これがうまくいくのは、プロジェクションが明瞭性チェックを行うからです。 の一部として行うからです。 の一部として行うからです。ResultTransformerが行うのは、結果を区別するためにフィルタリングすることではなく の後に を実行することです。

注目すべきは、オブジェクトのリストを取得する代わりに、idのリストを取得するようになったことです。