web-dev-qa-db-ja.com

JPAのテーブルごとに1つのリポジトリがあるはずですか?

JPAのテーブルごとに1つのリポジトリがあるはずですか?そうでない場合、リポジトリデータベースのジェネリックをどのように解決しますか?

たとえば、以下はStoreRepositoryです。 Storeオブジェクトに対する[〜#〜] crud [〜#〜]操作を処理します。リポジトリでStoreEventオブジェクトも保存したい場合、両方のオブジェクトに対応するために以下のインターフェイスをどのように変更しますか?

@Repository
public interface StoreRepository extends JpaRepository<Store, String> {
    public Store findByGuid(String guid);
}
34
user1099123

リポジトリは ドメイン駆動設計 から派生した概念であるため、データベーステーブルについて考えることは間違ったアプローチです。定義では、リポジトリから集約ルートにアクセスします。事実上、リポジトリはこれらのコレクションをシミュレートしています。

何が集約ルートを形成するのでしょうか?おそらくさらに興味深い:何をしないのですか?もちろん、これはドメインに大きく依存しますが、ここで例を挙げましょう。 Orderを含むLineItemsは通常、集約ルートとしてモデル化されます。これは、Orderの構成の性質によるものです。 LineItemは、周囲のOrderがなければ存在しません。

通常、永続化アクセスメカニズムはドメインの原則に従う必要があります。したがって、OrderLineItemの両方を_@Entity_クラスとしてモデル化しますが、OrderRepositoryのみを作成します。これらは集約ルートを形成し、整合性ルールを効果的に制御するためですオブジェクトグラフ内。

また、強くストア固有のリポジ​​トリベースインターフェースを使用することをしないことをお勧めしますそれらは-名前が示すように-可能であれば、ストアの詳細(例:flush())を知らないクライアントに公開します。詳細については、私の回答 here を参照してください。

40
Oliver Drotbohm