参数化HQL'为空'查询变为'= null'

时间:2017-11-20 17:42:29

标签: sql nhibernate hql query-builder

我有一个查询构建器,它构建一个参数化的HQL查询来进行OData过滤。在针对属性getBaseMemVariant2(std::variant<Foo, Bar>&): mov eax, DWORD PTR [rdi] ret 构建查询时,HQL的NULL隐藏看起来像这样......

where

... ... where $entity.Property is ? 被一个值为?的参数替换。但是,当我使用上述查询调用NULL时,执行的SQL不是session.CreateQuery(hql)查询,而是填充is null =@p1查询为NULL。这显然不符合我的要求。

如果我明确地使用@p1 HQL,那么一切正常,但我觉得我错过了什么或做了些蠢事。

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

根据此answer IS不是运营商。

  

注意一些重要的事情。没有&#34; IS&#34; T-SQL中的运算符。特别是IS [NOT] NULL运算符,它将单个表达式与NULL进行比较。

因此,如果您想使用IS NULL,可能需要创建动态查询,或者使用? IS NULL之类的参数。