将String映射到enum jooq

时间:2018-08-22 18:18:02

标签: java mysql sql jooq

是否有直接的方法将MySQL中的字段映射到JOOQ中的枚举? 字段为USER_STATUS,可能的值由

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

我尝试使用forcedType:

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

但是,这不会触发生成的代码中的任何更改。我尝试使用小写和大写字母,并在列名(user_status)前面加上前缀“。*”。似乎没有任何作用。 我在做什么错了?

谢谢!

1 个答案:

答案 0 :(得分:1)

<forcedType/> element有几种操作模式,每种操作模式都需要一个附加的子元素:

数据类型重写

在这种情况下,您需要一个<name/>元素才能将USER_STATUS列映射到另一种数据类型。但是,这不适用于枚举类型。

应用转换器或绑定

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

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

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

最简单的解决方案是在没有特殊情况的情况下在<enumConverter>true</enumConverter>上使用<forcedType/>标志,这也会为您应用org.jooq.impl.EnumConverter<forcedType/> element也对此进行了记录。

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