2011-02-04 2 views
1

При запросе базового класса NHibernate создаст левое внешнее соединение для каждого из подклассов базы. Это происходит, даже если запрос относится к свойствам только в базе, и проекции задаются для этих свойств.Как предотвратить nhibernate от создания левых внешних соединений для подклассов

Пример:

SELECT this_.Id as y0_, this_.Name as y1_ FROM AnimalBase this_ 
    left outer join Dog this_1_ on this_.Id=this_1_.AnimalBaseFK 
    left outer join Cat this_2_ on this_.Id=this_2_.AnimalBaseFK 
WHERE lower(this_.Name) like @p0;@p0 = '%rover%' 

Мой вопрос, как я должен изменить это поведение по умолчанию?

Благодаря

EDIT:

Посмотрите здесь:

How to perform a non-polymorphic HQL query in Hibernate?

ответ

1

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

select * from Animal 

NHibernate будет пытаться получить все животное. Итак, если у вас есть класс , который наследуется от Animal, это означает, что Собака является животным. (Это логично, так как наследование описывает отношение IS-A).

Вы можете отключить эту функцию. Для получения дополнительной информации: Loading a base class through nhibernate incorrectly uses mappings from derived classes

+0

благодарит Фредерика. Ссылка, которую вы дали, привела меня к лучшему: http://stackoverflow.com/questions/2093025/how-to-perform-a-non-polymorphic-hql-query-in-hibernate/2094321#2094321 –

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