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
?
答案 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);
}