【发布时间】:2020-08-29 12:07:12
【问题描述】:
目前我有一个转换器可以使用 Kotlin 处理 JOOQ 中的值对象。
我的数据库有一个名为 transactions 的表,其字段类型为 decimal(10, 2),名为 billing _amount,在我的 Kotlin 代码中,我有一个来自 DDD 的简单 ValueObject 来包装它,名为 BillingAmount,定义如下
data class BillingAmount(val value: BigDecimal)
至于我的 jooq 自定义转换器,我有以下代码:
public final TableField<TransactionsRecord, BillingAmount> BILLING_AMOUNT =
createField(
DSL.name("billing_amount"),
org.jooq.impl.SQLDataType.NUMERIC(10, 2).nullable(false),
this,
"",
org.jooq.Converter.ofNullable(
java.math.BigDecimal.class,
okano.dev.jooqtesting.BillingAmount.class,
t -> new okano.dev.jooqtesting.BillingAmount(t),
u -> u.getValue()
)
);
在我的存储库中,我只是想检索一个帐单金额的总和,但 jooq 抱怨 BillingAmount 没有扩展 Number 类。我知道这是一个阻止我的代码工作的 Java 通用验证,但是除了扩展 Number 类之外,还有什么办法可以解决这个问题?我认为转换器应该足够了,但我肯定错了。
这是我想要实现的简单查询:
// jooq is an instance of DSLContext
return jooq.select(sum(TABLE.BILLING_AMOUNT))
.from(TABLE)
.fetchSingle()
对这个问题有什么想法吗?提前致谢。
【问题讨论】:
-
试试
TABLE.BILLING_AMOUNT.coerce(BigDecimal.class) -
@M.Prokhorov:事实上,这可能是一个答案。
标签: java sql kotlin aggregation jooq