【问题标题】:JOOQ Orderby with Case Statement带有案例声明的 JOOQ Orderby
【发布时间】:2013-10-31 21:10:19
【问题描述】:

这是我的问题..

SelectQuery<Record> selectQuery  = transRefundFee.selectQuery();
selectQuery.addSelect(AccountBill.ACCOUNT_BILL.BILL_NUMBER,AccountBill.ACCOUNT_BILL.BILL_AMOUNT,AccountBill.ACCOUNT_BILL.TOTAL_PAID );
selectQuery.addFrom(AccountBill.ACCOUNT_BILL);
selectQuery.addConditions(AccountBill.ACCOUNT_BILL.FOLDER_RSN.eq(argFolderRSN));

我必须添加带有案例声明的 orderby 我们如何才能做到这一点我检查了Here 但它在我的情况下不起作用我像这样添加的任何其他方式

selectQuery.addOrderBy( DSL.decode().when(AccountBill.ACCOUNT_BILL.BILL_AMOUNT.le(new BigDecimal(0)),AccountBill.ACCOUNT_BILL.BILL_AMOUNT).then(AccountBill.ACCOUNT_BILL.BILL_AMOUNT) .otherwise(AccountBill.ACCOUNT_BILL.BILL_NUMBER));

但它的说法是The method then(TableField&lt;AccountBillRecord,BigDecimal&gt;) is undefined for the type CaseConditionStep&lt;BigDecimal&gt;

与下面的代码相同

selectQueryFee.addOrderBy(DSL.decode().when(AccountBill.ACCOUNT_BILL.BILL_AMOUNT.le(new BigDecimal(0))
                    .then(AccountBill.ACCOUNT_BILL.BILL_AMOUNT)
                    .otherwise(AccountBill.ACCOUNT_BILL.BILL_NUMBER)));

then(TableField) 方法未定义 对于类型条件

【问题讨论】:

标签: java sql jooq


【解决方案1】:

从 jOOQ 3.2 开始,CASE 表达式支持不实现 when() ... then() 结构,即没有 then() 关键字。相反,写:

DSL.decode()
   .when(AccountBill.ACCOUNT_BILL.BILL_AMOUNT.le(new BigDecimal(0)), 
         AccountBill.ACCOUNT_BILL.BILL_AMOUNT)
   .otherwise(AccountBill.ACCOUNT_BILL.BILL_NUMBER)

jOOQ 路线图上有一个待处理的功能请求来纠正这个问题:#615

【讨论】:

  • 我必须在这里进行投射? CaseConditionStep 类型中的方法 else(BigDecimal) 不适用于参数 (TableField)
  • @subodh:方法签名是:when(Condition, T).otherwise(T)。所以BILL_AMOUNTBILL_NUMBER 必须是同一类型。否则你将不得不投射,是的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多