Дублирование элементов с помощью Join в NHibernate Map - PullRequest
1 голос
/ 22 марта 2010

Я пытаюсь получить отдельные строки сведений, не создавая объект для родителя. У меня есть карта, которая соединяет родительскую таблицу с деталями для достижения этой цели:

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

Я возвращаю первый ряд три раза, в отличие от трех отдельных рядов, которые он должен вернуть. Если посмотреть на трассировку SQL в NH Profiler, запрос кажется правильным. Проблема в том, что проблема в сопоставлении, но я не уверен, как устранить неполадки в этом процессе. Я собираюсь включить ведение журнала, чтобы увидеть, что я могу найти, но я подумал, что опубликую здесь, если кто-то, имеющий опыт присоединения карт, знает, где я иду неправильно.

1 Ответ

0 голосов
/ 24 октября 2011

Найдена информация о преобразователе SetResults здесь:

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

Приветствие John

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...