首页 新闻 会员 周边

对象间单向关联时NHibernate的配置如何做?

0
悬赏园豆:20 [已关闭问题]

现在有如下的业务需求:订单的基本信息(Order)与订单收件人信息(Consignee)分别是两个对象,这里我建模的时候定义Order为实体,Consignee为值对象(这个值对象的理解不知道有没有问题),而且模型关型是一个Order聚合根导向Consignee的一个单向关联。但是在hibernate映射的时候不知道如何映射这种关系。下面贴出一些简单的代码,希望大家给予帮助。谢谢!


/// <summary>
/// 订单
/// </summary>
public class Order
{
public Money Amount { get; set; }
//……
/// <summary>
/// 收件人信息(存储在与订单一对一对关系的一张数据表中)
/// </summary>
public Consigneee Consignee { get; set; }
}

/// <summary>
/// 收件人
/// </summary>
public class Consignee
{
public virtual string ConsigneeName { get; set; }
public virtual string Address { get; set; }
}



如上面所示,Order通过属性对Consignee进行了引用。但是Consignee没有对Order的一个反向关联,因为业务上不需要,而且感觉不合理。但是这样一个模型在配置Nhibernate的映射时遇到了麻烦,不知道如何配置,请有经验的朋友帮忙处理下。谢谢了。

问题补充: Order与Consignee处在不同的表中
chen eric的主页 chen eric | 初学一级 | 园豆:4
提问于:2010-08-06 09:18
< >
分享
其他回答(1)
0

up

stewen | 园豆:14 (初学一级) | 2010-08-06 10:57
-1

用component配置节。

如:
<component name="DespatchAddress" class="ACompany.OrderProcessing.Model.Address">
            <property access="field.camelcase-underscore" column="DespatchStreet" name="Street"/>
            <property access="field.camelcase-underscore" column="DespatchCity" name="City"/>
            <property access="field.camelcase-underscore" column="DespatchCounty" name="County"/>
            <property access="field.camelcase-underscore" column="DespatchPostCode" name="PostCode"/>
        </component>

文野 | 园豆:205 (菜鸟二级) | 2010-08-06 11:57
Order和Consignee不是同一张表哦,呵呵
支持(0) 反对(0) chen eric | 园豆:4 (初学一级) | 2010-08-06 12:07
@chen eric: 在这里Consignee的处理方式已经更象一个实体了。 在Order的配置文件里配置one-to-one就好了,Consignee的配置文件里不要配。
支持(0) 反对(0) 文野 | 园豆:205 (菜鸟二级) | 2010-08-06 14:53
这个地方的话如果两个地址相同的Consignee的话,我们完全不需要区分它是哪个对象,是可替换的,所以我觉得可能consignee是一个值对象更全适些。它是跟随Order一对一,没有唯一的标识符,也不需要任何标识。 这个问题的话,从业务上来说应该更倾向于把它看成值对象。 但是为了适应NHibernate来说,如果想做成one-to-one的话,还得做一个体对象间的双向关联了。如果文野有好的方法可以解决的话可以来讨论哦,也可以在群里面来说,呵呵
支持(0) 反对(0) chen eric | 园豆:4 (初学一级) | 2010-08-06 18:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册