Если мы следуем принципам DDD, один общий корень должен иметь только ссылки (по id) на другой совокупный корень (ы).DDD: как правильно реализовать отношения JPA/Hibernate?
Пример:
// Product Aggregate root
class Product {
// References to categories Aggregate Roots (to ids)
Set<Long> categoryIds;
}
Но как это может быть достигнуто с JPA/Hibernate? В JPA, если мы хотим иметь, например, OneToMany отношение, мы определили его следующим образом:
// Product Aggregate root
class Product {
// Holds category aggregate roots
@OneToMany(mappedBy = "", cascade = CascadeType.ALL)
Set<Category> categories;
}
Так JPA-s подход будет держать категории агрегатных корни себя, что не рекомендуется в DDD.
Как бы вы конструировали отношения с JPA, но чтобы соответствовать принципам DDD?
P.S .: Я думал создать свойство типа string и сохранить список разделенных запятыми идентификаторов категорий, но есть ли лучшее решение?
'Каскад = CascadeType.ALL' движется в неправильном направлении, потому что который связывает два агрегата с одной и той же транзакцией –