【发布时间】:2016-12-26 21:29:54
【问题描述】:
如果我们遵循 DDD 原则,一个聚合根应该只有(通过 id)对另一个聚合根的引用。
例子:
// 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 中不推荐。
如果不符合 DDD 原则,您将如何设计与 JPA 的关系?
P.S.:我正在考虑将 categories 设为字符串类型的属性并保存以逗号分隔的类别 ID 列表,但有没有更好的解决方案?
【问题讨论】:
-
cascade = CascadeType.ALL正朝着错误的方向前进,因为这会将两个聚合与同一个事务联系起来
标签: hibernate jpa domain-driven-design aggregateroot