如何防止nhibernate为子类创建左外部联接
查询基类时,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
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
关系)
您可以禁用此行为。
更多信息:谢谢弗雷德里克。你给我的链接让我找到了一个更好的链接:谢谢弗雷德里克。您提供的链接让我找到了一个更好的链接: