我已经通过代码生成器生成了 jooq 记录。在我的记录中,我有一个时间戳字段,我想将其设置为数据库当前数据时间。
以下作品:
MyRecord myrecord = new MyRecord();
myrecord.setCreateTime(Timestamp.from(Instant.now()));
但是我想使用数据库时间,所以像这样:(显然下面的语法有一个编译错误)
myrecord.set(MY_RECORD.CREATE_TIME, DSL.currentTimestamp());
实现此目标的最佳方法是什么?
最佳答案
使用 jOOQ 的 INSERT
直接声明,而不是 UpdatableRecord
jOOQ 的 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 还是通过其他方式插入记录,都会生成当前时间戳。
关于java - 如何在 jooq 记录对象中设置当前数据库时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45704389/