문제
나는 이것을 시도했다 :
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에만이 코드를 사용 했으므로 다른 데이터베이스의 이식에 대해 확실하지 않습니다. 도움이되기를 바랍니다.
제휴하지 않습니다 StackOverflow