如何在jooq记录对象中设置cuurent DB时间

时间:2017-08-16 02:53:12

标签: java jooq

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

以下作品:

ByteBuf#arrayOffset

但是我想使用DB时间,所以这样的事情:(显然在下面的语法中存在编译错误)

MyRecord myrecord = new MyRecord();
myrecord.setCreateTime(Timestamp.from(Instant.now())); 

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

2 个答案:

答案 0 :(得分:2)

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

jOOQ&#39; UpdatableRecord API不允许将SQL表达式用作值,只有实际值可以通过设计传递给Record.set(Field<T>, T)方法。如果您希望引入SQL表达式,则应该恢复使用经典SQL,例如: INSERT

DSL.using(configuration)
   .insertInto(MY_TABLE)
   .set(...)
   .set(MY_TABLE.CREATE_TIME, DSL.currentTimestamp())
   .execute();

首选方法:使用SQL

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

答案 1 :(得分:2)

“另一个选择是使用触发器或SQL DEFAULT表达式直接放在表定义上”

同意,但根据您的应用程序和/或数据库平台,不应该使用触发器。列可以设置为DEFAULT,例如

MY_COLUMN DATE DEFAULT SYSDATE

仍然允许某人用NULL覆盖值,或者你可以

MY_COLUMN DATE DEFAULT ON NULL SYSDATE

即使显式请求null,也要将默认值设置到位。