java - jOOQ - 支持 JSR310

标签 java sql jooq jsr310

jOOQ 是否结合 PostgreSQL 提供对 JSR310 的支持?特别是,我正在尝试使用以下类:

  • java.time.Instant
  • java.time.LocalDate
  • java.time.LocalTime
  • java.time.LocalDateTime

我正在存储以下数据类型(根据 http://www.postgresql.org/docs/9.1/static/datatype-datetime.html ):

  • java.time.Instant:带时区的时间戳
  • java.time.LocalDate: 日期
  • java.time.LocalTime: 没有时区的时间
  • java.time.LocalDateTime:没有时区的时间戳

这些数据类型是否正确?

jOOQ是否支持java.sql.Timestampjava.sql.Datejava.sql.Time这四个类之间的转换上方(双向)?

最佳答案

jOOQ 路线图

直到 jOOQ 3.6,官方才支持 JSR-310 日期时间类型,因为 jOOQ 开源版和商业版仍然支持 Java 6。

在 jOOQ 3.7 中,这发生了变化,因为 Java 6 仅在专门构建的商业发行版中受支持,而标准发行版将需要 Java 8。此更改的相关问题是 #4338 .

另一个变化涉及标志 <javaTimeTypes/>告诉源代码生成器生成 JSR-310 类型而不是 java.sql.Date和类似的类型。默认情况下,此标志设置为 false,因此您需要将其设置为 true 直到问题 #5714已解决。

在 jOOQ 3.6 或更低版本中使用 JSR-310 类型

同时,您可以自己绑定(bind)所需的类型,让代码生成器使用您的自定义 ConverterBinding .请参阅手册中的相关部分:

正确的映射

JDBC 4.2 spec定义哪些 JSR-310 数据类型应该映射到哪些 JDBC 数据类型(这与 PostgreSQL 的理解相同)。特别是,JDBC 规范列表:

  • 添加了对 map 的支持 java.time.LocalDate到 JDBC DATE .
  • 添加了对 map 的支持 java.time.LocalTime到 JDBC TIME
  • 添加了对 map 的支持 java.time.LocalDateTime到 JDBC TIMESTAMP .
  • 添加了对 map 的支持 java.time.OffsetTime到 JDBC TIME_WITH_TIMEZONE .
  • 添加了对 map 的支持 java.time.OffsetDateTime到 JDBC TIMESTAMP_WITH_TIMEZONE .

JDBC 的理解似乎并不完全正确,因为很少有数据库真正将时区信息存储在 TIMESTAMP WITH TIME ZONE 中。数据类型(例如 Oracle),另请参阅此 DBA/StackExchange 答案:https://dba.stackexchange.com/a/59021/2512 .由于未存储时区,您的映射方法 java.time.InstantTIMESTAMP WITH TIME ZONE更好,因为 SQL 类型实际上只是一个 UTC 时间戳。

话虽如此,OffsetDateTime仍然可以映射到 TIMESTAMP WITH TIME ZONE , 但当时间戳存储在 PostgreSQL 中时,您将不知道使用的是哪个时区。

关于java - jOOQ - 支持 JSR310,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31748327/

相关文章:

java - 奇怪的是找不到符号 '@IntDef' 但 Android Studio 没有显示错误

java.lang.NoClassDefFoundError : org/apache/commons/lang/StringUtils when deploying web application

java - Ebean无法获取oneToMany关系

mysql - 如何使用 MySQL 获取取决于 id 的价格

java - jOOQ - 方法调用

java - 在 jUnit 测试的 UPDATE 语句中使用 jOOQs MockResult 类

java - hibernate 模式验证错误的列但使用正常的 int

java - 如何确定是否在 JVM 实例上设置了 -server 选项

SQL Server存储过程和SQL注入(inject)

postgresql - 使用 jOOQ 获取表列表