【问题标题】:Case when statement within HQL queryHQL 查询中的 case when 语句
【发布时间】:2021-09-13 07:42:35
【问题描述】:

我尝试了什么:-

    Select new fully.qualified.classname.ParkingEntry(p.arrivalDate, p.departureDate, 
       (case when p.chargedAmount is NULL then 0 else p.chargedAmount end) as chargedAmount)
    
      
    from fully.qualified.classname.ParkingEntry p

实体停车入口:-

@Entity
class ParkingEntry {
    
    Date arrivalDate;
    Date departureDate;
    BigDecimal chargedAmount;
    
    ParkingEntry(Date arrivalDate, Date departureDate, BigDecimal chargedAmount) {
        this.arrivalDate = arrivalDate;
        this.departureDate = departureDate;
        this.chargedAmount = chargedAmount;
    }
    
    ...
}

我试图从实体ParkingEntry 中获取arrivalDatedepartureDatechargedAmount 作为对象。我想确保如果chargedAmount 在表中是null,那么它应该将值返回为0。 上述查询有一些语法错误,因此无法正常工作。任何关于如何实现这一点的建议都将受到高度赞赏。

【问题讨论】:

  • 你可以试试chargedAmount IS NULL 代替= 吗?
  • @DhavalGoti:这不太好。
  • 1) new 需要完全限定的类名。 2) = NULL 是错误的,它必须是 IS NULL 3) 您从 ParkingEntry 中选择的不是实体
  • 我在实际代码中使用了完全限定的类名,ParkingEntry 也是一个实体,我也尝试过is NULL,但没有成功。我认为这与在new ParkingEntry() 构造函数中使用case 语句有关。

标签: java hibernate hql


【解决方案1】:

使用这个:

select new fully.qualified.classname.ParkingEntry(p.arrivalDate, p.departureDate, coalesce(p.chargedAmount, 0))
    
      
from fully.qualified.classname.ParkingEntry p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多