是否有直接的方法将MySQL中的字段映射到JOOQ中的枚举?
字段为USER_STATUS
,可能的值由
public enum Status {
ACTIVE, INACTIVE, SUSPENDED
}
我尝试使用forcedType:
<forcedType>
<userType>com.mycompany.Status</userType>
<expressions>USER_STATUS</expressions>
</forcedType>
但是,这不会触发生成的代码中的任何更改。我尝试使用小写和大写字母,并在列名(user_status)前面加上前缀“。*”。似乎没有任何作用。 我在做什么错了?
谢谢!
答案 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()
的映射。如果数据库中的枚举值包含不可映射的字符串(例如,包含空格),则需要应用手动映射/转换器。
最简单的解决方案是在没有特殊情况的情况下在<enumConverter>true</enumConverter>
上使用<forcedType/>
标志,这也会为您应用org.jooq.impl.EnumConverter
。 <forcedType/>
element也对此进行了记录。
适用与org.jooq.impl.EnumConverter
相同的规则。