如何在jooq记录对象中设置当前数据库时间

anu*_*nuj 4 java jooq

我已经通过代码生成器生成了 jooq 记录。在我的记录中,我有一个时间戳字段,我想将其设置为数据库当前数据时间。

下面的作品:

MyRecord myrecord = new MyRecord();
myrecord.setCreateTime(Timestamp.from(Instant.now())); 
Run Code Online (Sandbox Code Playgroud)

但我想使用数据库时间,所以是这样的:(显然下面的语法中有一个编译错误)

myrecord.set(MY_RECORD.CREATE_TIME, DSL.currentTimestamp());
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

Luk*_*der 7

INSERT直接使用jOOQ的语句,而不是UpdatableRecord

jOOQ 的UpdatableRecordAPI 不允许使用 SQL 表达式作为值,按照设计只能将实际值传递给Record.set(Field<T>, T)方法。如果您想引入 SQL 表达式,您应该恢复使用经典 SQL,例如INSERT

DSL.using(configuration)
   .insertInto(MY_TABLE)
   .set(...)
   .set(MY_TABLE.CREATE_TIME, DSL.currentTimestamp())
   .execute();
Run Code Online (Sandbox Code Playgroud)

首选方法:使用 SQL

另一种选择是使用DEFAULT可以直接放在表定义上的触发器或 SQL表达式。这样,无论您是通过 jOOQ 还是通过其他方式插入记录,都会生成当前时间戳。