2011-02-04 6 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から継承するDogクラスを持っている場合は、Dogが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 –

関連する問題