SetFetchMode игнорируется - PullRequest
       0

SetFetchMode игнорируется

1 голос
/ 14 декабря 2011

У меня есть следующие критерии:

session.CreateCriteria<ItemDeliveryDetail>()
       .SetFetchMode("ItemDelivery", FetchMode.Eager)
       .Add(Restrictions.Eq("Id", 21932250))
       .List<ItemDeliveryDetail>();

Это приводит к следующему запросу:

SELECT this_.itemdeliverydetail_id AS itemdeli1_4_0_,
       this_.itemdelivery_id       AS itemdeli2_4_0_,
       this_.partitiondate         AS partitio3_4_0_,
       this_.amount                AS amount4_0_,
       this_.processed_by_rem      AS processed5_4_0_,
       this_.single_item_price     AS single6_4_0_,
       this_.bookingaccount_id     AS bookinga7_4_0_,
       this_.supplierinvoice_id    AS supplier8_4_0_
FROM   itemdeliverydetail this_
WHERE  this_.itemdeliverydetail_id = :p0;

Как видите, нет признаков присоединения к ITEMDELIVERYкак я и ожидал.

Как это исправить?


Отображение ItemDelivery выглядит так:

mapping.CompositeId().KeyProperty(x => x.Id, "ITEMDELIVERY_ID")
                     .KeyProperty(x => x.DeliveryDate, "DELIVERY_DATE");
mapping.HasMany(x => x.ItemDeliveryDetails)
       .KeyColumns.Add("ITEMDELIVERY_ID", "PARTITIONDATE");

Отображение ItemDeliveryDetailвыглядит так:

mapping.CompositeId().KeyProperty(x => x.Id, "ITEMDELIVERYDETAIL_ID")
                     .KeyReference(x => x.ItemDelivery, "ITEMDELIVERY_ID",
                                                        "PARTITIONDATE");

1 Ответ

2 голосов
/ 15 декабря 2011

Краткий ответ: не поддерживается.

Фактически, если вы явно отключите поведение прокси-сервера для ItemDeliveryDetail.ItemDelivery, существуют сценарии, которые приводят к (внутреннему по отношению к NHibernate) бесконечному циклу и к полученному исключению переполнения стека.

РЕДАКТИРОВАТЬ, длинный ответ (частично опубликовано в комментариях ниже) Активная выборка по свойствам составного идентификатора не поддерживается механизмом ICriteria.Я полагаю, что вы можете заставить его работать, используя HQL (в целом HQL сильнее в объявлениях выборки по сравнению с ICriteria).

Поведение прокси может быть отключено, как обычно, в вашей процедуре сопоставления (будь то беглый или xml, или аннотации и т.д.)

Я помню, как старался, чтобы он работал на NH2 (и с треском провалился), и насколько я знаю, соответствующий код не был улучшен / изменен в NH3.

PS I 'Я работаю с NH 4 года.Как бы хорошо это ни было, 1014 * газиллион вещей не очевидно об этом.Просто посмотрите на источник

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