【问题标题】:JOOQ: map tinyint to boolean based on its lengthJOOQ:根据长度将 tinyint 映射到布尔值
【发布时间】:2019-01-12 14:49:43
【问题描述】:

我当前的 jooq-codegen-maven 配置将所有 tinyint(1) 字段映射到 java 的布尔值:

<forcedTypes>
    <forcedType>
        <name>BOOLEAN</name>
        <types>(?i:TINYINT)</types>
    </forcedType>
</forcedTypes>

问题是在某些情况下,DB 包含标记为 tinyint(3) 的列,不应将其视为布尔值,而是一些真正的 int。不幸的是,我找不到任何示例,文档有一些东西,但它并没有真正为我工作:

<forcedType>
   <name>BOOLEAN</name>
   <types>TINYINT\(1\)</types>
</forcedType>

【问题讨论】:

  • 请注意,即使这样有效,您的正则表达式也会被错误地转义。你的意思是写TINYINT\(1\)

标签: java mysql sql jooq


【解决方案1】:

从 jOOQ 3.12 开始

我们已经在代码生成器中实现了对从 MySQL 读取数字 display width 的支持。您可以使用以下方式进行匹配:

<forcedType>
  <name>BOOLEAN</name>
  <includeTypes>
    (?i:(TINY|SMALL|MEDIUM|BIG)?INT(UNSIGNED)?\(1\))
  </includeTypes>
</forcedType>

此博客文章对此进行了记录: https://blog.jooq.org/2019/09/27/how-to-map-mysqls-tinyint1-to-boolean-in-jooq/

这是通过以下方式实现的:https://github.com/jOOQ/jOOQ/issues/7719

直到 jOOQ 3.11

在 jOOQ 3.12 之前,jOOQ 代码生成器不考虑 TINYINT 之类的 display width 类型的 &lt;types/&gt; 正则表达式,仅仅是因为它只读取 INFORMATION_SCHEMA.DATA_TYPE(不包含此信息) ,而不是INFORMATION_SCHEMA.COLUMN_TYPE(确实如此)。

如果不能升级到 3.12,您可以:

  • 枚举&lt;forcedType/&gt; 规范中的所有布尔类型
  • 在查询INFORMATION_SCHEMA.COLUMN_TYPE的地方写一个programmatic code generator configuration,生成需要强制输入BOOLEAN的列​​集

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2020-04-21
    相关资源
    最近更新 更多