JPAのテーブルごとに1つのリポジトリがあるはずですか?そうでない場合、リポジトリデータベースのジェネリックをどのように解決しますか?
たとえば、以下はStoreRepository
です。 Store
オブジェクトに対する[〜#〜] crud [〜#〜]操作を処理します。リポジトリでStoreEvent
オブジェクトも保存したい場合、両方のオブジェクトに対応するために以下のインターフェイスをどのように変更しますか?
@Repository
public interface StoreRepository extends JpaRepository<Store, String> {
public Store findByGuid(String guid);
}
リポジトリは ドメイン駆動設計 から派生した概念であるため、データベーステーブルについて考えることは間違ったアプローチです。定義では、リポジトリから集約ルートにアクセスします。事実上、リポジトリはこれらのコレクションをシミュレートしています。
何が集約ルートを形成するのでしょうか?おそらくさらに興味深い:何をしないのですか?もちろん、これはドメインに大きく依存しますが、ここで例を挙げましょう。 Order
を含むLineItems
は通常、集約ルートとしてモデル化されます。これは、Order
の構成の性質によるものです。 LineItem
は、周囲のOrder
がなければ存在しません。
通常、永続化アクセスメカニズムはドメインの原則に従う必要があります。したがって、Order
とLineItem
の両方を_@Entity
_クラスとしてモデル化しますが、OrderRepository
のみを作成します。これらは集約ルートを形成し、整合性ルールを効果的に制御するためですオブジェクトグラフ内。
また、強くストア固有のリポジトリベースインターフェースを使用することをしないことをお勧めしますそれらは-名前が示すように-可能であれば、ストアの詳細(例:flush()
)を知らないクライアントに公開します。詳細については、私の回答 here を参照してください。