Kotlin 如果字段为空,则使用默认值的Jooq FETCHITO
我有数据类Kotlin 如果字段为空,则使用默认值的Jooq FETCHITO,kotlin,jooq,data-class,Kotlin,Jooq,Data Class,我有数据类 data class Author( val id: String, val name: String, val books: MutableList<Book> = mutableListOf() ) {} companion object { operator fun invoke( id: String, name: String, books: Mut
data class Author(
val id: String,
val name: String,
val books: MutableList<Book> = mutableListOf()
) {}
companion object {
operator fun invoke(
id: String,
name: String,
books: MutableList<Book>? = null
) = Author(id, name, books ?: mutableListOf())
}
但我有一个例外,若作者并没有书。这是合乎逻辑的,因为数据类Author中的外业手簿不可为空。我试图将伴生对象添加到数据类中
data class Author(
val id: String,
val name: String,
val books: MutableList<Book> = mutableListOf()
) {}
companion object {
operator fun invoke(
id: String,
name: String,
books: MutableList<Book>? = null
) = Author(id, name, books ?: mutableListOf())
}
伴生对象{
运算符乐趣调用(
id:String,
名称:String,
书籍:可变列表?=空
)=作者(id、姓名、书籍?:mutableListOf())
}
但它不起作用,jooq仍然尝试使用默认构造函数,我得到了一个异常。有没有办法在不使数据类Author中的外业手簿为空的情况下修复它?原因是
JSON_ARRAYAGG()
(与大多数聚合函数一样)为空集生成NULL
,而不是更“合理”的空[]
。显然,你永远不会想要这种行为。所以
合并(
jsonArrayAgg(jsonObject(book.ID,book.PRICE)),
jsonArray()
)
我将确保更新我在堆栈溢出问题上给出的所有其他答案,以指出这一点。如果存在合理的聚合标识(例如,[]
),未来的jOOQ版本可能会提供NULL
安全聚合函数,以使其更易于发现: