ドメイン駆動設計とリレーショナルデータベース

すべての Spring Data モジュールは、ドメイン駆動設計 [Amazon] の「リポジトリ」、「集約」、「集約ルート」の概念に触発されています。これらは、Spring Data JDBC にとってさらに重要な可能性があります。これは、リレーショナルデータベースを操作する際の通常の慣行にある程度反するからです。

集約は、アトミックな変更間で一貫性が保証されるエンティティのグループです。典型的な例は、Order と OrderItems です。Order のプロパティ(たとえば、numberOfItems は OrderItems の実際の数と一貫性があります)は、変更が加えられても一貫性を保ちます。

集合体全体の参照は常に一貫しているとは限りません。最終的に一貫性が保証されます。

各集約には、集約のエンティティの 1 つである集約ルートが 1 つだけあります。集約は、その集約ルートのメソッドを介してのみ操作されます。これらは、前述のアトミックな変更です。

リポジトリは、特定の型のすべての集約のコレクションのように見える永続ストアの抽象化です。一般的に、Spring Data の場合、これは集約ルートごとに 1 つの Repository が必要であることを意味します。さらに、Spring Data JDBC の場合、これは、集約ルートから到達可能なすべてのエンティティがその集約ルートの一部と見なされることを意味します。Spring Data JDBC は、集約のみが集約の非ルートエンティティを格納するテーブルへの外部キーを持ち、他のエンティティが非ルートエンティティを指すことはないと想定しています。

現在の実装では、集約ルートから参照されるエンティティは削除され、Spring Data JDBC によって再作成されます。

データベースの作業および設計のスタイルに一致する実装で、リポジトリメソッドを上書きできます。