kotlin - 如果字段为空,则 Jooq fetchInto 具有默认值
问题描述
我有数据类
data class Author(
val id: String,
val name: String,
val books: MutableList<Book> = mutableListOf()
) {}
我用jooq写了请求
val resultSet = dsl.select(author.ID, author.NAME,
field(select(jsonArrayAgg(jsonObject(book.ID, book.PRICE)))
.from(books)
.where(book.AUTHOR_ID.eq(author.ID))
).`as`("books"))
.from(authors)
.fetchInto(Author::class.java)
但是如果作者没有书,我会得到一个例外。这是合乎逻辑的,因为数据类 Author 中的外业簿不可为空。我试图将伴随对象添加到数据类
companion object {
operator fun invoke(
id: String,
name: String,
books: MutableList<Book>? = null
) = Author(id, name, books ?: mutableListOf())
}
但它不起作用,jooq 仍然尝试使用默认构造函数,我得到一个异常。有没有办法在不使数据类作者中的外业手册可以为空的情况下修复它?
解决方案
原因是JSON_ARRAYAGG()
(像大多数聚合函数一样)NULL
为空集生成,而不是更“合理”的 empty []
。显然,您永远不会想要这种行为。因此,您可以改用COALESCE
,另请参阅此问题:
coalesce(
jsonArrayAgg(jsonObject(book.ID, book.PRICE)),
jsonArray()
)
我会确保更新我在 Stack Overflow 上给出的所有其他答案以指出这一点。未来的 jOOQ 版本可能会提供NULL
安全的聚合函数,以防存在合理的聚合身份(例如[]
)以使其更容易被发现:https ://github.com/jOOQ/jOOQ/issues/11994
推荐阅读
- node.js - Amazon Cognito - AdminCreateUser - 如何不跳过电子邮件验证
- sql - 查询多个 Azure SQL 数据库 - Azure SQL 数据库不能用作中央管理服务器
- r - 如何将文本文件中的特定值循环附加到 R 中预先指定对角线的矩阵中?
- r - 从 RC 类方法打印时未使用的参数错误
- r - 使用 dplyr 和条件格式从字符串构造常微分方程
- r - 我可以在没有 R studio 的情况下使用 R 吗?
- c# - 如何获取 html 输入按钮以正确显示 resource.resx 键/值条目?
- java - 显式类型转换,派生类数组
- parsing - 有没有办法在 python 中解析一个 .txt 文件,让用户给出一个词来解析?
- python - 如何从熊猫数据框列中删除字符串值?