为什么 jOOQ 将 DSL.currentLocalDateTime() 映射到 current_timestamp 而不是本地时间戳?

Why does jOOQ map DSL.currentLocalDateTime() to current_timestamp instead of localtimestamp?

org.jooq.impl.DSL.currentLocalDateTime() 在 SQL 方言 Oracle 中呈现为 current_timestamp(参见 class org.jooq.impl.CurrentTimestamp,相关代码未公开)。

In Java 8 java.time.LocalDateTime 是日期时间 没有 时区。因此我希望 jOOQ 呈现 LOCALTIMESTAMP 而不是 CURRENT_TIMESTAMP 因为 the difference between LOCALTIMESTAMP function and CURRENT_TIMESTAMP is that LOCALTIMESTAMP returns a TIMESTAMP value while CURRENT_TIMESTAMP returns a TIMESTAMP WITH TIME ZONE value.

如何强制 jOOQ 渲染不带时区的时间戳?最好不要定义 CustomField?

确实是有趣的观察。这是历史性的,因为 DSL.currentTimestamp() 方法生成 CURRENT_TIMESTAMP 表达式但将其映射到 java.sql.Timestamp (这是 java.time.LocalDateTime.

的等效类型

最好的解决方法是使用 plain SQL,在这些情况下总是如此:

public static Field<LocalDateTime> localtimestamp() {
    return DSL.field("localtimestamp", LocalDateTime.class);
}