web-dev-qa-db-ja.com

Spring-Data JPA CrudRepositoryはIterableを返しますが、これをListにキャストしても大丈夫ですか?

私はSpring-Data-Jpaを使用してSpring-bootアプリケーションのバックエンド配線コードを生成するコード生成ツールを書いています機能しますが、リストはそうなので、私はイテラブルをリストに変換する最良の方法を探しています。

この投稿 コレクションへのイテラブルの変更について見て、Guavaのようなライブラリを使用したり、変換を行う独自の関数を実装したりするのではなく、なぜListにキャストしないのでしょうか?私が知らないことをすることで何か間違ったことはありますか?

編集:コード生成ツールであるため、サードパーティのライブラリへの依存関係を導入するコードを生成することは合理的ではなく、変換を行うために独自の関数を記述することは、どこかに住んでいる必要があるため、本当に合理的ではないため、私は尋ねます生成されたコードにはそれを含めたくない。少しい場合は、単純なキャストが機能しますが、何か足りないものがあるのではないかと思っただけですか?

24
www.debug.coach

いいえ、大丈夫だとは思いません。

ListIterableであることが保証されていますが、IterableListではない場合があります。つまり、IterableListにキャストすると、実行時に失敗する可能性があります。たとえそれが機能しても、インターフェースの契約を破ることなくSpring Data JPAの新しいバージョンで変更される可能性があるので、今後も機能し続けるという保証はありません。

キャストを使用する代わりに、Listを返す独自のクエリメソッドを宣言する必要があります。

35
Andy Wilkinson

[spring-data-jpa]だから、JPAを使用すると思います。この場合、JpaRepositoryの代わりに CrudRepository を使用します。メソッドは、希望するListを返します。

78
Robert Niestroj

インターフェイスはCrudRepositoryをさらに拡張できます。リストを返す新しいメソッドfindAllを追加するだけです。以下の例のように:

@Repository
public interface DataRepository extends CrudRepository<Data, Long> {

    @Override
    List<Data> findAll();

}

すべてのリポジトリによって拡張される「抽象」リポジトリがある場合は、このメソッドも追加できるため、すべてのリポジトリに効果があります。以下の例のように:

@NoRepositoryBean
public interface GenericRepository<T> extends CrudRepository<T, Long> {

    @Override
    List<T> findAll();

}
15
Biga