代码之家  ›  专栏  ›  技术社区  ›  anuj

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

  •  4
  • anuj  · 技术社区  · 7 年前

    以下工作:

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

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

    myrecord.set(MY_RECORD.CREATE_TIME, DSL.currentTimestamp());
    

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

    2 回复  |  直到 7 年前
        1
  •  7
  •   Lukas Eder    7 年前

    INSERT 直接声明,而不是 UpdatableRecord

    jOOQ的 UpdatableRecord API不允许使用SQL表达式作为值,只能将实际值传递给 Record.set(Field<T>, T) 插入 :

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

    首选方法:使用SQL

    另一种选择是使用触发器或SQL DEFAULT

        2
  •  2
  •   Lukas Eder    7 年前

    “另一种选择是使用触发器或SQL默认表达式,您可以直接将其放入表定义中。”

    同意,但不需要根据应用程序和/或数据库平台使用触发器。列可以设置为默认值,例如

    MY_COLUMN DATE DEFAULT SYSDATE
    

    MY_COLUMN DATE DEFAULT ON NULL SYSDATE
    

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