1

この単純なクエリがNHibernate3.3で間違ったSQLを生成している理由を理解しようとしています。

var query = session.CreateQuery(@"select count(*) as C
                                  from Parent p
                                       inner join fetch p.Child c
                                  where c.Field = 'someValue'");

このクエリを実行すると、生成されたSQLに子テーブルへの参照が含まれないため、恐ろしい「マルチパート識別子_child.FIELDをバインドできませんでした」という例外が発生します。

なぜこの問題とそれを解決する方法について誰かが考えを持っていますか?

ありがとう!

4

2 に答える 2

0

別のエイリアスをに割り当てます。エイリアスとしてとcount(*)を使用しているため、おそらくnhibernateが混乱しています。cC

たとえば、クエリを次のように設定できます

var query = session.CreateQuery(@"select count(*) as co
                              from Parent p
                                   inner join fetch p.Child c
                              where c.Field = 'someValue'");
于 2013-03-21T15:41:01.633 に答える
0

参考までに、他の誰かがこれによってやけどを負った場合。

NHibernateの内部は、クエリを生成するときに結合を除外しているようです。

したがって、私たちが見つけた唯一の解決策は、クエリを次のように言い換えることでした。

select count(*) as C
from Parent p
where p.Child.Field = 'someValue'

このようにして、NHibernateは結合構文を生成します(相互結合演算子とwhere句を使用)。

于 2013-09-26T11:33:20.160 に答える