Phi*_*lip 8 java mysql enums jooq
我有下表YNM:
id name
1 YES
2 NO
3 MAYBE
Run Code Online (Sandbox Code Playgroud)
并希望JOOQ生成以下java枚举:
public enum YNM {
YES,NO,MAYBE;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,由于过于复杂/反直觉,因此在JOOQ 3中删除了对此的支持.有没有办法实现这个目标?
提前致谢.
我认为你应该能够使用 EnumConverter
public class YNMConverter extends EnumConverter<String, YNM > {
public YNMConverter() {
super(String.class, YNM.class);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要将它作为自定义类型和强制类型添加到代码生成器中。这是一个程序示例
new CustomType()
.withName("YNM")
.withType(YNM.class.getName())
.withConverter(YNMConverter.class.getName());
new ForcedType()
.withTypes("varchar")
.withName("YNM")
.withExpression(".*ynm.*") // regex to match the column name
Run Code Online (Sandbox Code Playgroud)
您需要将强制类型和自定义类型添加到代码生成中。这可以在 maven/xml 或以编程方式完成
当然,您可以通过几个步骤在您身边重新实现已删除的功能:
您需要覆盖JavaGenerator以实现将主数据(可能是多个表)转换为枚举的代码生成。如何工作完全取决于您,例如您可以:
ForcedType为这些枚举生成配置每当引用这样的主数据表时,您应该使用<forcedType/>配置将外键列重新连接到该枚举。这最好通过以编程方式配置代码生成来完成,因为这样可以让您对 jOOQ 代码生成配置有更多的动态控制。
除了上述内容之外,您可能应该从生成的输出中删除主数据表本身。在您的情况下,这应该导致配置:
<excludes>YNM</excludes>
Run Code Online (Sandbox Code Playgroud)
或者,如果您有多个主数据表:
<excludes>YNM|OTHER_MASTER_DATA_TABLE|...</excludes>
Run Code Online (Sandbox Code Playgroud)
排除这些表将阻止从 jOOQ 客户端代码访问它们,并删除生成代码中的外键信息,这可能会造成混淆。
| 归档时间: |
|
| 查看次数: |
1475 次 |
| 最近记录: |