2010-12-01 3 views
0

NHibernate, как правило, довольно умный и опускает соединения во многих случаях, если поля из связанного объекта не используются в запросе. Тем не менее, я хочу, чтобы сделать формулу дискриминатор на другой таблицу без подвыборки, так что я сделал обычай стойкой бактерии сКак заставить NHibernate всегда делать соединение для многих-к-одному

protected override string DiscriminatorFormulaTemplate 
{ 
    get { return this.DiscriminatorFormula; } 
} 

и указан только именем столбца в формуле (но это имя столбца из соответствующей таблицы)

<discriminator formula="TypeID" /> 

Я понимаю, что это обычно связано с конфликтами, но в данном конкретном случае это не проблема.

Итак, теперь я хочу заставить связанный (many-to-one) стол быть всегда соединенным с основным. Каков наилучший способ сделать это? Он присоединяется несколько раз, когда HN обнаруживает, что некоторые поля используются, однако я не знаю, как заставить его делать это все время.

ответ

2
<many-to-one ... fetch="join"/> 

Это охватывает Get, Criteria и ленивую нагрузку, но не HQL.

Другой вариант заключается в использовании пользовательских SQL для всех операций, а также выбрать из подзапроса вместо таблицы (с джойн внутри этого запроса)

К сожалению, все, что вы делаете в данный момент будет хак. Путь NH разработан, дискриминатор должен быть в той же таблице.

Смежные вопросы