将字符串Map到enum jooq

dba5bblo  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(542)

有没有一种简单的方法将mysql中的字段Map到jooq中的enum?场地是 USER_STATUS ,可能的值由

public enum Status {
  ACTIVE, INACTIVE, SUSPENDED
}

我试着用forcedtype:

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

但是,这并没有在生成的代码中触发任何更改。我尝试了小写和大写,用“.*”作为列名(user\u status)的前缀和后缀。似乎什么都没用。我做错什么了?
谢谢!

qvsjd97n

qvsjd97n1#

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

数据类型重写

在这种情况下,你需要 <name/> 要Map的元素 USER_STATUS 列到另一个数据类型。但这不适用于枚举类型。

应用转换器或绑定

一种将数据库类型Map到自己的类型的方法 <userType/> 是通过应用 <converter> (即。 org.jooq.Converter )或者 <binding/> (即。 org.jooq.Binding ). 使用这种方法可以完全控制数据库类型和用户类型之间的转换。你也可以使用内置的 org.jooq.impl.EnumConverter 为了这个。
这个 EnumConverter 适用于顺序Map和1:1字符串到 java.lang.Enum.name() Map。如果数据库中的枚举值具有不可Map的字符串(例如,包含空格),则需要应用手动Map/转换器。

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

最简单的解决方案是使用 <enumConverter>true</enumConverter> 旗子挂在你的脸上 <forcedType/> ,如果您没有任何特殊情况,这也将适用 org.jooq.impl.EnumConverter 为你。这也被记录为 <forcedType/> 元素。
和你的规则一样 org.jooq.impl.EnumConverter 应用。

相关问题