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 多对一映射返回重复值的主要内容,如果未能解决你的问题,请参考以下文章