我有一个查询构建器,它构建一个参数化的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,那么一切正常,但我觉得我错过了什么或做了些蠢事。
这里发生了什么?
答案 0 :(得分:1)
根据此answer IS
不是运营商。
注意一些重要的事情。没有&#34; IS&#34; T-SQL中的运算符。特别是IS [NOT] NULL运算符,它将单个表达式与NULL进行比较。
因此,如果您想使用IS NULL
,可能需要创建动态查询,或者使用? IS NULL
之类的参数。