2017-12-14 14 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条件では受け入れられません。この場合は、NULLではない場合はELSE ... ENDを使用します。

参考にしてください:https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/queryhql.html

関連する問題