Nhibernate 多对一映射返回重复值

Posted

技术标签:

【中文标题】Nhibernate 多对一映射返回重复值【英文标题】:Nhibernate many-to-one mapping returning duplicate values 【发布时间】:2015-09-23 10:40:14 【问题描述】:

我有一个主表 PURCHASE BILL MASTER 和一个子表 PURCHASE BILL DETAILS。 我在子表中写了一个impl来获取数据如下:

 public IList<PurchaseBillDetails> GetDetailsByInvDate(string FrmDate, string ToDate, int ShopId, int DeptId, int DrugId)
    
        ICriteria Query = SessionFactory
       .GetCurrentSession()
       .CreateCriteria(typeof(PurchaseBillDetails))
       .CreateAlias("PurchaseBillMaster", "PBM");
                   if (FrmDate != string.Empty && FrmDate != null)
        
            Query.Add(Restrictions.Gt("PBM.InvoiceDate", Convert.ToDateTime(FrmDate)));
        
        if (ToDate != string.Empty && ToDate != null)
        
            Query.Add(Restrictions.Lt("PBM.InvoiceDate", Convert.ToDateTime(ToDate)));
        
        if (ShopId != 0)
        
            Query.Add(Restrictions.Like("PBM.ShopNo", ShopId));
        
        if (DeptId != 0)
        
            Query.Add(Restrictions.Eq("PBM.DeptId", DeptId));
        
        if (DrugId != 0)
        
            Query.Add(Restrictions.Like("DrugId", DrugId));
        

        Query.Add(Restrictions.Eq("HospitalId", Convert.ToInt32(HttpContext.Current.Session["HospitalId"])));
        //Query.AddOrder(Order.Desc("BillDate"));
        IList<PurchaseBillDetails> list = Query.List<PurchaseBillDetails>();
        return list;
    

我已经写了一个这样的映射:

<many-to-one name="PurchaseBillMaster" class="Validus.Pharmacy.Domain.PurchaseBillMaster, HIS.Pharmacy"  column="PURCHASE_BILL_ID" insert="false" update="false"></many-to-one>

但问题是它返回重复值一次,即物理表在给定日期有 3 行,但 impl 给出 33,因为每行重复了很多次。

如何获取唯一行。请帮助。

提前致谢。

【问题讨论】:

【参考方案1】:

您应该告诉您的标准,它应该使用DistinctRootEntity entity-transformer 过滤掉非唯一实体。

Query.SetResultTransformer(Transformers.DistinctRootEntity);
IList<PurchaseBillDetails> list = Query.List<PurchaseBillDetails>();

接下来,我想看看您的实体的定义,更具体地说是多对多关系。 对于这种关系,您是使用 List 还是 Set ?

【讨论】:

嗨,感谢您的回复,我的多对一关系如下: 但是您的班级中的集合是列表还是集合?

以上是关于Nhibernate 多对一映射返回重复值的主要内容,如果未能解决你的问题,请参考以下文章

在春季使用多对一映射时获得无限的Json响应[重复]

具有多个结果集的NHibernate存储过程[重复]

多对一公式将表名附加到 SQL 关键字

多对一映射不允许属性

MyBatis__配置多对一映射返回

NHibernate3剖析:Mapping篇之集合映射基础:List映射