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

如何防止nhibernate为子类创建左外部联接,nhibernate,inheritance,criteria,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

查询基类时,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%'
我的问题是我应该如何改变这种默认行为

谢谢

编辑:

看这里:


之所以这样做,是因为默认情况下NHibernate使用多态查询。 我是说,如果你这样做:

select * from Animal
NHibernate将试图找回所有的动物。因此,如果您有一个继承自
Animal
Dog
类,则表示狗是一种动物。(这是逻辑,因为继承描述了一种
is-A
关系)

您可以禁用此行为。
有关更多信息:

之所以这样做,是因为默认情况下NHibernate使用多态查询。 我是说,如果你这样做:

select * from Animal
NHibernate将试图找回所有的动物。因此,如果您有一个继承自
Animal
Dog
类,则表示狗是一种动物。(这是逻辑,因为继承描述了一种
is-A
关系)

您可以禁用此行为。
更多信息:

谢谢弗雷德里克。你给我的链接让我找到了一个更好的链接:谢谢弗雷德里克。您提供的链接让我找到了一个更好的链接: