2014-05-21 4 views
0

예를 들면 다음과 같은 JPQL을 좋아합니다.JPQL에 대한 혼동

Let 호텔 객체에는 고객 및 조직이라는 두 가지 객체가 있습니다. Customer가 null이 아닌 경우 조직은 null입니다. 고객이 null 인 경우 조직은 null이되지 않습니다. 그래서

나는 JPQL이 이것을 좋아한다.

선택 h.customer.name.firstName, 호텔 시간 하나는 항상 null이기 때문에 내가 하나 개의 변수에이 두 가지 결과 중 하나를 할당 할

에서 h.organization.name. 감사합니다. 내 영어로 죄송합니다.

+0

누군가가 –

답변

1

아마, 당신은 COALESCE() 기능을 찾고 있습니다. 다음을 시도하십시오.

SELECT COALESCE(h.customer.name.firstName, h.organization.name) FROM Hotel h 

원하는 경우 표현식을 사용할 수도 있습니다.

자세한 내용은 : http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch11.html#d5e3257

+0

쿼리가 잘 작동 내 질문에 대답하십시오하지만 난 –

+0

당신이 보여줄 수있는 결과를 얻을 수 dind't [당신은 필요에 따라 수정 그것을 시도 할 수 있습니다, 그것을 실행 시도하지 않은] 우리 코드? 또한 SQL 문 ('persistence.xml'에서'hibernate.show_sql'과 같은 것)의 로깅을 활성화하고 결과 SQL 쿼리를 검사 할 수 있습니다. –

+0

다음은 내 sql 문입니다. SELECT 케이스 (t1.FIRSTNAME이 NULL이 아님) t1.FIRSTNAME (t2.NAME이 NULL이 아님) 일 때 t2.NAME ELSE? 끝에서 호텔 t0, 조직 t2, 고객 t1 (t1 .ID = t0.CUSTOMERID) AND (t2.ID = t0.ORGANIZATIONID)) " –

0

당신은 다른 사람이 null 이외의 값을 선택, 사례 문을 사용하여 시도 할 수 코드에서 null 값을 확인할 수 있습니다 다음 두 필드 &를 선택할 수 있습니다.

SELECT CASE WHEN (h.customer.name.firstName NOT NULL) THEN h.customer.name.firstName 
      WHEN (h.organization.name NOT NULL) THEN h.organization.name 
      ELSE DEFAULT_VALUE 
     END 
FROM Hotel h