Hibernate是否支持通过id引用实体而不是直接引用?

时间:2013-11-18 15:37:44

标签: c# java hibernate nhibernate domain-driven-design

我正在阅读Vaughn Vernon撰写的Implementing Domain-Driven Design,在关于聚合的章节中,显示了以下结构:

enter image description here

这个结构可以使用Hibernate / NHibernate轻松映射,因为每个实体都通过引用引用聚合根。

然而,他决定将设计重构为:

enter image description here

现在所有实体都使用ProductId值对象来引用根。

如何使用Hibernate / NHibernate对此进行建模?

图表的说明可以在Effective Aggregate Design by Vaughn Vernon

找到

2 个答案:

答案 0 :(得分:0)

在BacklogItem,Rlease,Sprint的hbms

<component name="productId">
    <property name="value" column="product_id"/>
</component>

或JPA风格

@Embedded
@OverrideAttributes....
private ProductId productId

在这种情况下,BacklogItem不需要延迟加载Product,因此一个简单的标识符就足够了。只需将它们视为休眠组件即可。

答案 1 :(得分:0)

使用(Fluent-)NHibernate看起来像

Component(x => x.ProductId, c => c.Map(pid => pid.Value, "product_id"));