jOOQ 路线图
在 jOOQ 3.6 之前,官方还没有对 JSR-310 日期时间类型的支持,因为 jOOQ 开源版和商业版仍然支持 Java 6。
在 jOOQ 3.7 中,这种情况发生了变化,因为 Java 6 仅在专门构建的商业发行版中受支持,而标准发行版将需要 Java 8。与此更改相关的问题是 #4338。
另一个更改涉及一个标志,用于告诉源代码生成器生成JSR-310类型而不是和类似类型。默认情况下,此标志设置为 false,因此您需要将其设置为 true,直到问题 #5714 得到解决。<javaTimeTypes/>
java.sql.Date
将 JSR-310 类型与 jOOQ 3.6 或更低版本配合使用
同时,您可以自己绑定所需的类型,并让代码生成器使用您的自定义或 .请参阅手册中的相关部分:Converter
Binding
正确的映射
JDBC 4.2 规范定义了哪些 JSR-310 数据类型应该映射到哪些 JDBC 数据类型(这与 PostgreSQL 对相同的理解一致)。特别是,JDBC 规范列出了:
- 添加了对映射到 JDBC 的支持。
java.time.LocalDate
DATE
- 添加了对映射到 JDBC 的支持
java.time.LocalTime
TIME
- 添加了对映射到 JDBC 的支持。
java.time.LocalDateTime
TIMESTAMP
- 添加了对映射到 JDBC 的支持。
java.time.OffsetTime
TIME_WITH_TIMEZONE
- 添加了对映射到 JDBC 的支持。
java.time.OffsetDateTime
TIMESTAMP_WITH_TIMEZONE
然而,JDBC的理解似乎并不完全正确,因为很少有数据库真正以数据类型存储时区信息(例如Oracle确实如此),另请参阅此DBA / StackExchange答案:https://dba.stackexchange.com/a/59021/2512。由于不存储时区,因此映射到的方法更好,因为SQL类型实际上只是一个UTC时间戳。TIMESTAMP WITH TIME ZONE
java.time.Instant
TIMESTAMP WITH TIME ZONE
话虽如此,仍然可以映射到 ,但是当时间戳存储在PostgreSQL中时,您将不知道使用了哪个时区。OffsetDateTime
TIMESTAMP WITH TIME ZONE