【问题标题】:JOOQ MySQL DATETIME TypeJOOQ MySQL 日期时间类型
【发布时间】:2019-12-02 08:36:03
【问题描述】:

我正在尝试使用 JOOQ 生成这个简单的 SQL,但由于某种原因我无法完成它。我希望为 MySQL 数据库生成以下代码。

CREATE TABLE T (
    F DATETIME
);

我希望它是这样的

dsl.createTable(name("T"))
   .column("F", MySQLDataType.DATETIME);

很遗憾,MySQLDataType 已被弃用。 JOOQ 明确表示只使用在 SQLDataType 中声明的类型,但由于某种原因我找不到任何类型。

我已经尝试过使用DATELOCALDATELOCALDATETIME,但它们都生成了一个TIMESTAMP 字段。


我正在使用 JOOQ 同时为 MySQL 和 Oracle DBMS 生成 DDL。 Oracle 类型生成得很好(我得到了DATE,没关系),但 MySQL 只给了我TIMESTAMPs。

有什么提示吗?

【问题讨论】:

    标签: java mysql jooq


    【解决方案1】:

    在 jOOQ 3.11 中,#7375 已弃用特定方言的数据类型,遗憾的是还没有替代功能。替换将在不早于 jOOQ 3.13(可能稍后)通过#5713 实现,这是一个更强大的动态数据类型注册表 - 与当前的静态注册表相反,后者完全依赖于内部 API 和静态初始化。

    目前,您可以继续在您的情况下使用MySQLDataType.DATETIME,或者为它创建自己的DefaultDataType 实例。这两种方法同样不安全,一种已被弃用,另一种依赖于内部 API。

    不过,出于向后兼容性的原因,已弃用的类型在很长一段时间内都不会被删除。

    【讨论】:

    • 作为该项目的主要开发人员,我假设您说的是实话。谢谢你的回答。
    【解决方案2】:

    您可以改用相应的 SQLDataType。 链接:official api

    【讨论】:

    • 感谢您的回复。该页面中的所有类型都已弃用,因为它们是特定于 DBMS 的,事实上,我正在使用 JOOQ 同时为 MySQL 和 Oracle 生成代码。 Oracle 类型生成得很好,但 MySQL 只给了我 TIMESTAMP,而我需要 DATETIME。
    【解决方案3】:
    In jooq 3.13.2
    <generator>
         <generate>
         <javaTimeTypes>false</javaTimeTypes>
         </generate>
    ...
    

    强制使用时间戳

    jooq manual

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2018-06-06
      • 1970-01-01
      相关资源
      最近更新 更多