我正在尝试检索单个详细信息行,而不必为父项创建对象。我有一个地图连接父表与细节来实现这一目标:
Table("UdfTemplate");
Id(x => x.Id, "Template_Id");
Map(x => x.FieldCode, "Field_Code");
Map(x => x.ClientId, "Client_Id");
Join("UdfFields", join =>
{
join.KeyColumn("Template_Id");
join.Map(x => x.Name, "COLUMN_NAME");
join.Map(x => x.Label, "DISPLAY_NAME");
join.Map(x => x.IsRequired, "MANDATORY_FLAG")
.CustomType<YesNoType>();
join.Map(x => x.MaxLength, "DATA_LENGTH");
join.Map(x => x.Scale, "DATA_SCALE");
join.Map(x => x.Precision, "DATA_PRECISION");
join.Map(x => x.MinValue, "MIN_VALUE");
join.Map(x => x.MaxValue, "MAX_VALUE");
});
当我使用以下方式在NH中运行查询时
Session.CreateCriteria(typeof(UserDefinedField))
.Add(Restrictions.Eq("FieldCode", code)).List<UserDefinedField>();
我回到第一行三次,而不是应该返回的三行。查看NH Profiler中的SQL跟踪,查询似乎是正确的。问题感觉就像它在映射中,但我不确定如何解决该过程。我即将开启日志记录以查看我能找到的内容,但我想我会发布此处,以防有经验映射连接的人知道我哪里出错了。
答案 0 :(得分:0)
在这里找到关于SetResulttransformer的信息:
http://www.coderanch.com/t/216546/ORM/java/Hibernate-returns-duplicate-results
这使您的代码成为:
Session.CreateCriteria(typeof(UserDefinedField))
.Add(Restrictions.Eq("FieldCode", code))
.SetResultTransformer(CriteriaSpecification.DistinctRootEntity)
.List<UserDefinedField>();
干杯 约翰