使用NHibernate Map中的Join重复项目

时间:2010-03-22 17:08:32

标签: nhibernate join mapping

我正在尝试检索单个详细信息行,而不必为父项创建对象。我有一个地图连接父表与细节来实现这一目标:

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跟踪,查询似乎是正确的。问题感觉就像它在映射中,但我不确定如何解决该过程。我即将开启日志记录以查看我能找到的内容,但我想我会发布此处,以防有经验映射连接的人知道我哪里出错了。

1 个答案:

答案 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>();

干杯 约翰