当前位置: 首页 > 知识库问答 >
问题:

jOOQ-支持JSR310

侯和惬
2023-03-14

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

  • java.time。即时
  • java.time。本地日期
  • java.time。本地时间
  • java.time.LocalDateTime

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

  • java.time.即时带有时区的时间戳
  • java.time.LocalDatedate
  • java.time.LocalTime没有时区的时间
  • java.time.LocalDateTime没有时区的时间戳

这些数据类型正确吗?

jOOQ是否支持java.sql之间的翻译。时间戳,java.sql。日期和java.sql。时间和上面的四个类(双向)?


共有2个答案

吕自明
2023-03-14

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

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

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

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

钱瑞
2023-03-14
匿名用户

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

在jOOQ 3.7中,此更改为Java6仅在专门构建的商业发行版中受支持,而标准发行版需要Java8。此更改的相关问题是#4338。

另一个变化涉及标志<代码>

同时,您可以自己绑定所需的类型,并让代码生成器使用自定义的转换器或绑定。请参阅手册中的相关章节:

  • 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到JDBCDATE的支持。
  • 增加了对映射java.time.LocalTime到JDBCTIME
  • 的支持
  • 增加了对映射java.time.LocalDateTime到JDBCTIMESTAMP的支持。
  • 增加了对映射java.time.OffsetTime到JDBCTIME_WITH_TIMEZONE的支持。
  • 增加了对映射java.time.OffsetDateTime到JDBCTIMESTAMP_WITH_TIMEZONE的支持。

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

话虽如此,OffsetDateTime仍然可以映射到带有时区的时间戳,但您将不知道在PostgreSQL中存储时间戳时使用了哪个时区。

 类似资料:
  • 问题内容: jOOQ是否结合PostgreSQL提供对JSR310的支持?特别是,我尝试使用以下类: 我正在存储以下数据类型(根据http://www.postgresql.org/docs/9.1/static/datatype- datetime.html ): : : : : 这些数据类型正确吗? jOOQ是否支持,和之间以及上述四个类之间的转换(双向)? 问题答案: jOOQ路线图 直到j

  • 我对JOOQ产品与AWS RDS Aurora MySQL的兼容性有点困惑。 也许这纯粹是一项牌照限制,而非技术限制。 本页https://www.jooq.org/legal/licensing#databases在专业版中显示RDS Aurora支持 我的问题是: 有谁能确认这实际上是一个许可证使用条款限制,而不是开源代码的技术限制,例如,当使用专业版时,并不是一个实际会运行不同风格的JOOQ

  • 我知道jOOQ将在不支持它的系统(如PostgreSQL)上模拟SQLMERGE。 我有一个带有串行(自动增量)id列和字符串uri列的表。我想在我的数据库中使用数字ID而不是URI,所以我必须确保在ID查找表中有一个URI。因此,按照jOOQ手册中的示例,我认为这将起作用: 这给了我一个这样的语句: 但是日志说jOOQ继续并尝试用绑定值执行查询。但是该表从未更新。所以我猜jOOQ没有在Postg

  • 我正在评估我们是否可以为我们的项目从普通JDBC迁移到jOOQ。其中大部分看起来很有希望,但我现在想知道一个特定的流:嵌套行。让我解释一下。 假设您有以下两张表: (我们假设一个学生只能是一个班级的一员。) 让我们为这些表创建一个响应类型。我将在下面的查询中使用这些。 现在让我们使用嵌套行获取所有带有学生的类: 一种有用的变体是仅在数组中使用嵌套行: 我想知道jOOQ是否有一种优雅的方法来解析包含

  • 我不能使用jOOQ生成器为MySQL生成类,但在PostgreSQL中是逆的 我在代码生成配置文件中包含了“dual”: 我正在使用jOOQ的最新版本:2.4.0。可能有什么问题?

  • 我遇到了这个问题java.lang.IllegalArgumentException:MySQL只支持单个生成的值。在我所有的insert查询中,不仅仅是这个表。我使用的是jooq 3.15和r2dbc。可能是什么问题 堆栈跟踪 生成的sql对我来说似乎没有问题,我甚至尝试在workbench上成功地插入它 表ddl看起来是这样的,它相当简单