为什么 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);
}
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);
}