为什么jOOQ将DSL.currentLocalDateTime()映射到current_timestamp而不是localtimestamp?

时间:2017-05-09 15:58:24

标签: oracle jooq

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

在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

1 个答案:

答案 0 :(得分:1)

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

对您而言,最好的解决方法是在这些情况下始终使用plain SQL

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