非hibernate多对一映射返回重复值

本文关键字:返回 映射 hibernate 多对一 | 更新日期: 2023-09-27 18:14:01

我有一个主表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,因为每一行重复了很多次。

如何获得唯一的行。请帮助。

非hibernate多对一映射返回重复值

您应该告诉您的标准,它应该通过使用DistinctRootEntity实体转换器过滤掉非唯一实体。

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

接下来,我想看看你的实体的定义,更具体地说,是多对多关系。