我在 Kotlin 项目中使用 Exposed 库。 在我的表声明中,我有这样的列:
val updatedDate = datetime("updated_dt").clientDefault { DateTime.now() }
如果我默认替换客户端默认函数,如下所示,有什么不同:
val updatedDate = datetime("updated_dt").default(DateTime.now())
我已经看到了这两个函数的源代码,但仍然不知道。
clientDefault
功能:
fun <T:Any> Column<T>.clientDefault(defaultValue: () -> T): Column<T> {
this.defaultValueFun = defaultValue
this.dbDefaultValue = null
return this
}
default
功能:
fun <T:Any> Column<T>.default(defaultValue: T): Column<T> {
this.dbDefaultValue = SqlExpressionBuilder.run {
asLiteral(defaultValue)
}
this.defaultValueFun = { defaultValue }
return this
}
一般来说,区别是(仅根据您引用的代码(:
-
default
只接受固定T
,会生成DEFAULT
SQL 子句; -
clientDefault
接受生成T
的函数(因此它可以为不同的行返回不同的结果(,并且不生成DEFAULT
。
所以default(DateTime.now())
几乎肯定不是你想要的;它会生成类似DEFAULT "2019-10-10T..."
的东西,它被称为日期时间,而不是DEFAULT NOW()
。