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

C# Hibernate是否支持通过ID而不是直接引用实体?,c#,java,hibernate,nhibernate,domain-driven-design,C#,Java,Hibernate,Nhibernate,Domain Driven Design,我正在阅读沃恩·弗农的著作,在关于骨料的章节中,显示了以下结构: 使用Hibernate/NHibernate可以很容易地映射此结构,因为每个实体都逐个引用聚合根 但是,他决定将设计重构为: 现在,所有实体都使用ProductIdvalue对象引用根 如何使用Hibernate/NHibernate对此进行建模 这些图表的解释可以在BacklogItem、Rlease和Sprint的hbms中找到 <component name="productId"> <prop

我正在阅读沃恩·弗农的著作,在关于骨料的章节中,显示了以下结构:

使用Hibernate/NHibernate可以很容易地映射此结构,因为每个实体都逐个引用聚合根

但是,他决定将设计重构为:

现在,所有实体都使用
ProductId
value对象引用根

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


这些图表的解释可以在BacklogItem、Rlease和Sprint的hbms中找到

<component name="productId">
    <property name="value" column="product_id"/>
</component>
在这种情况下,BacklogItem不需要懒散地加载产品,因此一个简单的标识符就足够了。只需将它们视为hibernate组件。

使用(Fluent-)NHibernate,看起来就像

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

不知道为什么要这样做,但是一个简单的
Map(x=>x.ProductId)
组件(x=>x.ProductId,c=>c.Map(…)
就足够了。否?@Firo我添加了一个链接来解释这些图表。如果您只需要引用的ProductObject的Id,NHibernate足够聪明,不会延迟加载产品。我猜Hibernate也是这样做的?@Firo该解决方案是由ddd原则驱动的,而不是由持久性基础设施驱动的。因此,即使hibernate支持,也只需要ProductId。
Component(x => x.ProductId, c => c.Map(pid => pid.Value, "product_id"));