문제

나는 이것을 시도했다 :

from Table where (:par1 is null or col1 = :par1)

그러나 그런 일이 발생합니다

from Table where :par1 is null

: par1이 null이 아닌 경우에도 항상 테이블의 모든 행을 항상 반환합니다.

동안

 select * from table where col1 = 'asdf'

행을 반환하지 않습니다.

내 응용 프로그램이 다른 데이터베이스 엔진에서 실행되기 때문에 네이티브 문법을 사용할 수 없습니다.

도움이 되었습니까?

해결책

와 동일합니다 nvl HQL의 명령은입니다 coalesce 명령. coalesce(a,b) 돌아올 것입니다 a 만약에 a 그렇지 않으면 null이 아닙니다 b.

그래서 당신은 다음의 선에 무언가를 원할 것입니다.

from Table where col1 = coalesce(:par1, 'asdf')

다른 팁

기본 데이터베이스가 Oracle이라면 NVL 기능을 사용할 수 있습니다. 시도해 보았습니다.

Query query = session.createQuery(
                    " select ft from FeatureToggle ft left outer join ft.featureToggleCustomerMap "
                    + " ftcm where nvl(ftcm.custId,:custId) = :custId");

query.setParameter("custId", Long.valueOf(custId));

유스 케이스는 다른 것이 될 수 있으며 데이터베이스가 NVL 인 경우 요구 사항에 따라 NVL 기능을 사용할 수 있습니다. Oracle에만이 코드를 사용 했으므로 다른 데이터베이스의 이식에 대해 확실하지 않습니다. 도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top