如何防止nhibernate为子类创建左外连接

时间:2011-02-04 06:09:41

标签: nhibernate inheritance criteria

查询基类时,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%'

我的问题是如何更改此默认行为?

由于

修改

看这里:

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

1 个答案:

答案 0 :(得分:1)

这样做是因为NHibernate默认使用多态查询。 我的意思是,如果你这样做:

select * from Animal

NHibernate将尝试检索所有动物。因此,如果您有一个继承自Dog的{​​{1}}类,则意味着Dog是一个Animal。 (这是逻辑,因为继承描述了Animal关系)。

您可以禁用此行为。 有关详细信息:Loading a base class through nhibernate incorrectly uses mappings from derived classes