2017-11-20 17 views
1

ODataフィルタリングを行うためのパラメータ化されたHQLクエリを作成するクエリビルダーがあります。 NULLいるプロパティに対してクエリを構築する場合、HQLのwhere claluseは次のように?は値がNULLあるだパラメータで置き換えられます...パラメータ化されたHQL 'がnull'クエリは '= null'になります

... where $entity.Property is ? 

を...見えます。ただし、上記のクエリでsession.CreateQuery(hql)を呼び出すと、実行されたSQLはis nullクエリではなく、クエリになり、@p1がNULLになるようになります。これは明らかに私がしたいことをしません。

HQLを明示的に$entity.Propery is nullにすると、すべて正常に動作しますが、何かが不足している、または何か愚かなことをしているように感じます。

ここでは何が起こっていますか?

答えて

1

この通りanswerISは演算子ではありません。

何か重要なことがあります。 T-SQLには "IS"演算子はありません。特に、単一の式をNULLと比較するIS [NOT] NULL演算子があります。

あなたがIS NULLを使いたいのであれば、多分あなたは、動的クエリを作成する必要がある、または多分? IS NULLのようなあなたのパラメータを使用します。

+0

この場合、NHibernateは、 'x IS? 'でパラメータ化されたHQLクエリを渡すと本当に例外がスローされるはずです。 – GoatInTheMachine

関連する問題