Spring Data の M2 までJpaRepositoryは、次の理由により、ユーザーに拡張を要求しました。
- クラスパス スキャン インフラストラクチャは、Spring Data JPA と Spring Data Mongo を並行して使用する可能性があるため、そのインターフェイスを拡張するインターフェイスのみを選択し、それらの両方がまったく同じパッケージを指しているため、どのストアに対してプロキシを作成するかが明確ではありません。
Repositoryしかし、RC1 以来、それはかなり風変わりなケースであり、CrudRepositoryなどを使用するだけの利点は、前述のコーナー ケースで取らなければならない労力よりも重要であると考えているため、開発者にその負担を任せるだけです。exclude名前空間でand要素を使用includeして、これをより細かく制御できます。
- M2 までは、CRUD メソッドを再宣言して
@Transactional. AnnotationTransactionAttributeSourceこの決定は、トランザクション構成を見つけるために使用するアルゴリズムによって決定されました。具体的なリポジトリ インターフェイスで CRUD メソッドを再宣言して適用するだけで、トランザクションを再構成する可能性をユーザーに提供したかったため@Transactionalです。RC1TransactionAttributeSourceでは、注釈をリポジトリの CRUD 実装に戻すことができるカスタムを実装することにしました。
簡単に言えば、要約すると次のようになります。
RC1 の時点で、必要な場合を除いて、ストア固有のリポジトリ インターフェイスを拡張する必要はもうありません…</p>
- よりコアなリポジトリ インターフェースでは、ベースのアクセスの代わりに
Listベースのアクセスを使用します (ただし、共通の基本インターフェースで関連するメソッドを単純に再宣言して、同様に s を返すこともできます) 。findAll(…)IterableList
- などのJPA固有のメソッドを利用したい
saveAndFlush(…)。
Repository一般に、RC1 以降の CRUD メソッドの公開に関しては、マーカー インターフェイスのみを拡張し、公開する CRUD メソッドを選択的に追加することさえできるため、はるかに柔軟です。バッキング実装は引き続きすべてのメソッドを実装するためPagingAndSortingRepository、呼び出しをインスタンスにルーティングできます。
public interface MyBaseRepository<T, ID extends Serializable> extends Repository<T, ID> {
List<T> findAll();
T findOne(ID id);
}
public interface UserRepository extends MyBaseRepository<User, Long> {
List<T> findByUsername(String username);
}
その例では、and (CRUD メソッドを実装するインスタンスにルーティングされます) と、2 つの CRUD メソッドにファインダー メソッドを追加する具象リポジトリMyBaseRepositoryのみを公開するように定義します。findAll()findOne(…)
このトピックの詳細については、リファレンス ドキュメントを参照してください。