【发布时间】:2019-10-08 10:53:23
【问题描述】:
在我的 jOOQ 配置文件中有这一行:
<javaTimeTypes>true</javaTimeTypes>
如果我在 HSQLDB 中创建这个表:
CREATE TABLE T1 (C1 TIMESTAMP DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP NOT NULL);
生成的jOOQ代码是这样的:
public final TableField<T1Record, LocalDateTime> C1 =
createField("C1", org.jooq.impl.SQLDataType.LOCALDATETIME.nullable(false).
defaultValue(org.jooq.impl.DSL.field("LOCALTIMESTAMP",
org.jooq.impl.SQLDataType.LOCALDATETIME)), this, "");
我的 JVM 从 CET 时区开始,无论我在创建 DSLContext 之前是否将其设置为 GMT,当插入或更新行(没有明确设置值)时,jOOQ 总是使用 CET 时区。
当直接使用 JDBC 时,时间戳会插入到 GMT 中,这正是我想要的。
如何配置 jOOQ 以达到相同的效果?
我正在使用 IntelliJ IDEA 检查数据库内容。
【问题讨论】:
-
数据库在哪个时区运行?您能否展示代码如何使用 jOOQ 和 JDBC 获取数据?
-
数据库以嵌入式模式运行,位于 CET 时区。我正在通过 IntelliJ IDEA 检查数据库内容。 jOOQ 和原始 JDBC 之间的区别在于数据的写入方式。 jOOQ 使用 CET 时区设置当前值,而我预计它是 GMT,就像原始 JDBC 一样。我编辑了问题以反映这些额外的细节。
-
谢谢,但你能显示实际的代码吗?否则,很难知道“原始 JDBC”是什么意思。或者,如果您认为自己发现了错误,您可以提交问题并附上 MCVE 以帮助重现问题:github.com/jOOQ/jOOQ-mcve