2017-11-20 40 views
1

OData 필터링을 수행하기위한 매개 변수가있는 HQL 쿼리를 작성하는 쿼리 작성기가 있습니다. NULL되는 속성에 대한 쿼리를 작성하는 경우, HQL의 where claluse ...이 같은 ?이 값이 NULL 인의 매개 변수로 대체됩니다매개 변수가있는 HQL '이 null입니다'쿼리는 '= null'이됩니다.

... where $entity.Property is ? 

을 ... 보인다. 그러나 위의 쿼리를 사용하여 session.CreateQuery(hql)을 호출하면 실행 된 SQL은 is null 쿼리가 아니지만 @p1이 NULL로 채워진 [email protected] 쿼리가됩니다. 이것은 분명히 내가 원하는 것을하지 않습니다.

내가 HQL을 명시 적으로 만들면 모든 것이 정상적으로 작동하지만 뭔가를 놓치거나 바보 같은 짓을하고있는 것처럼 느껴집니다.

여기에 무슨 일이 일어나고 있습니까?

답변

1

에 따르면이 answerIS는 연산자가 아닙니다.

중요한 사항이 있습니다. T-SQL에는 "IS"연산자와 같은 것이 없습니다. 특히 단일 식을 NULL과 비교하는 IS [NOT] NULL 연산자가 있습니다.

그래서 당신은 아마 당신이 ? IS NULL처럼 매개 변수를 사용하여 어쩌면 동적 쿼리를 만들거나해야합니다 IS NULL을 사용합니다.

+0

그럴 경우 NHibernate는 'x IS?'라는 매개 변수가있는 HQL 쿼리를 전달할 때 실제로 예외를 던져야한다고 생각합니다. – GoatInTheMachine