【问题标题】:Mapping String to enum jooq将字符串映射到枚举 jooq
【发布时间】:2019-01-29 01:43:43
【问题描述】:

有没有一种直接的方法可以将 MySQL 中的字段映射到 JOOQ 中的枚举? 该字段为USER_STATUS,可能的值由

定义
public enum Status {
  ACTIVE, INACTIVE, SUSPENDED
}

我尝试使用强制类型:

<forcedType>
    <userType>com.mycompany.Status</userType>
    <expressions>USER_STATUS</expressions>
</forcedType>

但是,这并没有触发生成的代码中的任何更改。我尝试了小写和大写,在列名(user_status)的前缀和后缀上加上'.*'。似乎没有任何效果。 我做错了什么?

谢谢!

【问题讨论】:

    标签: java mysql sql jooq


    【解决方案1】:

    &lt;forcedType/&gt; element 有几种操作模式,每一种都需要一个额外的子元素:

    数据类型重写

    在这种情况下,您需要一个 &lt;name/&gt; 元素来将 USER_STATUS 列映射到另一种数据类型。不过,这不适用于枚举类型。

    应用转换器或绑定

    将数据库类型映射到您自己的&lt;userType/&gt; 的一种方法是应用&lt;converter&gt;(即org.jooq.Converter)或&lt;binding/&gt;(即org.jooq.Binding)。使用这种方法可以完全控制数据库类型和用户类型之间的转换。您也可以为此使用内置的org.jooq.impl.EnumConverter

    EnumConverter 适用于序数映射和 1:1 字符串到 java.lang.Enum.name() 映射。如果您在数据库中的枚举值具有不可映射的字符串(例如包含空格),那么您需要应用手动映射/转换器。

    应用枚举转换器 (jOOQ 3.10+)

    最简单的解决方案是在您的&lt;forcedType/&gt; 上使用&lt;enumConverter&gt;true&lt;/enumConverter&gt; 标志,如果您没有任何特殊情况,这也会为您应用org.jooq.impl.EnumConverter&lt;forcedType/&gt; element 也记录了这一点。

    适用与org.jooq.impl.EnumConverter 相同的规则。

    【讨论】:

    • 卢卡斯,你是最棒的!
    • 你知道哪里有完整的运行示例吗?
    • 在有关&lt;forcedType/&gt; element的链接手册页中查找&lt;enumConverter&gt;
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多