DDDの原則に従えば、1つの集約ルートは、別の集約ルートへの参照(IDによる)のみを持つ必要があります。DDD:JPA/Hibernateエンティティの関係で正しく実装する方法は?
例:
// Product Aggregate root
class Product {
// References to categories Aggregate Roots (to ids)
Set<Long> categoryIds;
}
しかし、どのようにJPAを/ Hibernateでそれを達成することができますか?私たちは、例えば、OneToMany関係を持つようにしたい場合は、JPAで は、我々は次のようにそれを定義した:
// Product Aggregate root
class Product {
// Holds category aggregate roots
@OneToMany(mappedBy = "", cascade = CascadeType.ALL)
Set<Category> categories;
}
をだから、JPA-のアプローチはDDDで推奨されていないカテゴリ集計根自体を、開催します。
JPAとの関係はどのように設計するのですか?ただし、DDDの原則に適合するにはどうすればよいですか?
P .:私はcategories
という文字列型のプロパティを作成し、カンマ区切りのカテゴリIDのリストを保持することを考えていましたが、それ以上の解決策がありますか?
@Entity
public class Product {
@Id
@GeneratedValue
private int id;
@OneToMany
@JoinTable
private Set<Category> categories;
// constructor, getters, setters, etc...
}
@Entity
public class Category {
@Id
@GeneratedValue
private int id;
// constructor, getters, setters, etc...
}
単なる例として、私はいくつか一緒にプラグインされます::
'カスケード= CascadeType.ALL'があるため、間違った方向に向かっています2つの集約を同じトランザクションに結びつけます –