jOOQ - support for JSR310



jOOQ是否支持JSR310与PostgreSQL结合使用?特别是,我尝试使用以下类:

  • 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: timestamp with timezone
  • java.time.LocalDate: date
  • java.time.LocalTime: time without timezone
  • java.time.LocalDateTime: timestamp without timezone

这些数据类型正确吗?

jOOQ是否支持java.sql.Timestamp, java.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解决。

使用JSR-310类型,jOOQ 3.6或更低

在此期间,您可以自己绑定所需的类型,并让代码生成器使用您自定义的ConverterBinding。参见手册中的相关章节:
  • http://www.jooq.org/doc/latest/manual/sql-building/queryparts/custom-bindings
  • http://www.jooq.org/doc/latest/manual/code-generation/custom-data-types
  • http://www.jooq.org/doc/latest/manual/code-generation/custom-data-type-bindings

正确映射

JDBC 4.2规范定义了哪些JSR-310数据类型应该映射到哪些JDBC数据类型(这与PostgreSQL的理解一致)。特别地,JDBC规范列出:

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

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

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

jOOQ 3.9.0现在可以在代码中配置JSR-310支持:

new Configuration()
     .withGenerator(new Generator()
          .withGenerate(new Generate()
              .withJavaTimeTypes(true)));

相同的结构将应用于xml配置(配置-生成器-生成- javaTimeTypes)

请关注https://github.com/jOOQ/jOOQ/issues/5714,查看默认情况下何时启用

相关内容

  • 没有找到相关文章

最新更新