首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jOOQ -支持JSR310

jOOQ -支持JSR310
EN

Stack Overflow用户
提问于 2015-07-31 14:14:56
回答 2查看 4.6K关注 0票数 16

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.Instanttimestamp with timezone
  • java.time.LocalDatedate
  • java.time.LocalTimetime without timezone
  • java.time.LocalDateTimetimestamp without timezone

这些数据类型正确吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-31 14:59:25

jOOQ路线图

直到jOOQ 3.6之前,JSR-310日期时间类型还没有官方的支持,因为jOOQ开源版和商业版本仍然支持Java6。

在Java3.7中,这种变化是因为Java6只在一个特定构建的商业发行版中被支持,而标准发行版将需要jOOQ 8,相关的问题是#4338

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

使用jOOQ 3.6或更少的JSR-310类型

同时,您可以自己绑定所需的类型,并让代码生成器使用您的自定义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中时,您将不知道使用了哪个时区。

票数 16
EN

Stack Overflow用户

发布于 2017-01-03 10:46:12

现在可以在jOOQ 3.9.0中提供JSR-310支持,以便在代码中进行配置:

代码语言:javascript
复制
new Configuration()
     .withGenerator(new Generator()
          .withGenerate(new Generate()
              .withJavaTimeTypes(true)));

同样的结构也适用于xml配置()。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31748327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档