jOOQ是否提供JSR310与PostgreSQL相结合的支持?特别是,我试图使用以下类:
java.time.Instantjava.time.LocalDatejava.time.LocalTimejava.time.LocalDateTime我存储在以下数据类型中(按照http://www.postgresql.org/docs/9.1/static/datatype-datetime.html):
java.time.Instant:timestamp with timezonejava.time.LocalDate:datejava.time.LocalTime:time without timezonejava.time.LocalDateTime:timestamp without timezone这些数据类型正确吗?
jOOQ是否支持java.sql.Timestamp、java.sql.Date和java.sql.Time之间以及上述四个类之间的转换(双向)?
发布于 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类型
同时,您可以自己绑定所需的类型,并让代码生成器使用您的自定义Converter或Binding。见手册的有关章节:
正确映射
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中时,您将不知道使用了哪个时区。
发布于 2017-01-03 10:46:12
现在可以在jOOQ 3.9.0中提供JSR-310支持,以便在代码中进行配置:
new Configuration()
.withGenerator(new Generator()
.withGenerate(new Generate()
.withJavaTimeTypes(true)));同样的结构也适用于xml配置()。
请密切关注https://github.com/jOOQ/jOOQ/issues/5714,查看默认情况下何时启用它。
https://stackoverflow.com/questions/31748327
复制相似问题