2017-12-14 21 views
0

아래에 HQL 쿼리가 있습니다.HQL IF 절이 IS NOT NULL과 함께 작동하지 않습니다.

@Query("SELECT IF (job.doneDate IS NOT NULL) THEN SUM(jobCost.amount) FROM JobCost AS jobCost " 
     + "LEFT JOIN jobCost.job AS job WHERE job.code = :#{#filter.jobCode} " 
     + "AND jobCost.costType = :#{#filter.jobCostType} " 
     + "AND jobCost.job.business.id = :#{#filter.searchBusiness} " 
     + "AND jobCost.date >= :job.doneDate " 
     + "AND jobCost.date <= :#{#filter.endDate} ELSE 0.00 END") 

콘솔에서이 오류가 발생했습니다.

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: THEN near line 1, column 40 [SELECT IF (job.doneDate IS NOT NULL) THEN SUM(jobCost.amount) FROM com.job.JobCost AS jobCost LEFT JOIN jobCost.job AS job WHERE job.code = :__$synthetic$__1 AND jobCost.costType = :__$synthetic$__2 AND jobCost.job.business.id = :__$synthetic$__3 AND jobCost.date >= :job.doneDate AND jobCost.date <= :__$synthetic$__4 ELSE 0.00 END] 

어떻게 수정해야합니까?

+0

달성하려는 목표는 무엇입니까? 이 쿼리 구문은 무엇입니까? – fateddy

+0

@fateddy spring 주석 쿼리. 'jobCost.amount'의 합계를 얻으려고합니다. – rokz92

답변

2
@Query("SELECT CASE WHEN job.doneDate IS NOT NULL THEN SUM(jobCost.amount) ELSE 0.00 END FROM JobCost AS jobCost " 
    + "LEFT JOIN jobCost.job AS job WHERE job.code = :#{#filter.jobCode} " 
    + "AND jobCost.costType = :#{#filter.jobCostType} " 
    + "AND jobCost.job.business.id = :#{#filter.searchBusiness} " 
    + "AND jobCost.date >= :job.doneDate " 
    + "AND jobCost.date <= :#{#filter.endDate}") 

참고 사항 : ELSE는 WHERE 조건에서 허용되지 않으므로 ELSE는 NULL이 아닌 경우를 기준으로 처리 할 수 ​​있습니다.

참조 : https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/queryhql.html