我在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/