首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HQL IF子句not work with IS NOT NULL

HQL IF子句not work with IS NOT NULL
EN

Stack Overflow用户
提问于 2017-12-14 14:15:06
回答 1查看 984关注 0票数 0

我有下面的HQL查询。

代码语言:javascript
复制
@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")

我在控制台上得到了这个错误。

代码语言:javascript
复制
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]

我该如何纠正这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2017-12-14 14:35:19

代码语言:javascript
复制
@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}")

请注意:在WHERE条件下ELSE是不可接受的,您可以在不为NULL THEN的情况下通过CASE处理此问题。否则...END。

请参阅:https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/queryhql.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47806966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档