jOOQ codegen for enum in another schema



我在Postgres中有一个设置,看起来像这样:

CREATE TYPE my_enum AS ENUM ( 'left', 'right');
CREATE TABLE my_table ( direction my_enum not null );
CREATE SCHEMA reporting;
CREATE VIEW reporting.my_table AS SELECT * FROM public.my_table;

我有使用reporting模式的 jOOQ。(我宁愿不改变这一点。

我希望生成的代码中的direction列具有生成的Java枚举作为其类型,但它的类型为java.lang.Object。 这可能是因为jOOQ看不到Postgres枚举的定义,因为它在reporting模式之外。

我尝试在 Java 代码中定义枚举并使用 jOOQ 3.10 的enumConverter,但这在 codegen 期间会产生此错误:org.jooq.exception.SQLDialectNotSupportedException: Type USER-DEFINED is not supported in dialect POSTGRES.

我可以使用.cast和原始 SQL 解决此问题,但我想知道是否有我没有想到的干净解决方案,或者这是否是 jOOQ 中已知的缺失部分。

理想情况下,您应该让 jOOQ 从public架构为您生成枚举。您可以使用代码生成器的<include><exclude>标记中的一些正则表达式轻松排除所有其他内容。

如果由于某种原因这不是一种可行的方法,请注意,列上没有任何类型信息意味着您不能简单地使用Converter。您必须实现数据类型Binding: https://www.jooq.org/doc/latest/manual/sql-building/queryparts/custom-bindings/

最新更新