非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,因为每一行重复了很多次。
如何获得唯一的行。请帮助。
您应该告诉您的标准,它应该通过使用DistinctRootEntity
实体转换器过滤掉非唯一实体。
Query.SetResultTransformer(Transformers.DistinctRootEntity);
IList<PurchaseBillDetails> list = Query.List<PurchaseBillDetails>();
接下来,我想看看你的实体的定义,更具体地说,是多对多关系。