gpt4 book ai didi

java - 将字符串映射到枚举 jooq

转载 作者:行者123 更新时间:2023-11-29 02:41:03 25 4
gpt4 key购买 nike

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

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

我尝试使用 forcedType:

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

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

谢谢!

最佳答案

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

数据类型重写

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

应用转换器或绑定(bind)

一种将数据库类型映射到您自己的方法 <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 相同的规则申请。

关于java - 将字符串映射到枚举 jooq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51972905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com