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(…)
Iterable
List
- などの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(…)
このトピックの詳細については、リファレンス ドキュメントを参照してください。