19

Spring Data Repository 経由でアクセスしたい大きなテーブルがあります。

現在、インターフェイスを拡張しようとしていPagingAndSortingRepositoryますが、リストを返すメソッドしか定義できないようです。

public interface MyRepository extends 
        PagingAndSortingRepository<MyEntity, Integer>
{
  @Query(value="SELECT * ...")
  List<MyEntity> myQuery(Pageable p);
}

一方、findAll()付属のメソッドはをPagingAndSortingRepository返しますIterable(データはメモリにロードされていないと思います)。

Iterable を返す、および/またはすべてのデータを一度にメモリにロードしないカスタム クエリを定義することは可能ですか?

大きなテーブルを処理するための代替手段はありますか?

4

3 に答える 3

11

ここに古典的なコンサルティングの答えがあります。それは依存します。メソッドの実装はストア固有であるため、基盤となるストア API に依存します。JPA の場合、….getResultList()a を返すため、ストリーミング アクセスを提供する機会はありませんListListしたがって、特に JPA 開発者はリストの操作に慣れている可能性があるため、もクライアントに公開します。したがって、JPA の場合、唯一のオプションはページネーション API を使用することです。

Neo4j のようなストアでは、リポジトリIterableが CRUD メソッドおよびファインダー メソッドの実行で返されるため、ストリーミング アクセスがサポートされます。

于 2013-03-06T09:55:03.717 に答える