jOOQ和autogeneration,如何避免表POJO中的UDT记录

Jea*_*ean 20 java postgresql jooq

我在PostgreSQL数据库中定义了一个类型T和一个视图V.

CREATE TYPE my_type AS
(
  mt_column1 smallint NOT NULL
);

CREATE VIEW my_view
AS SELECT
   some_column_id integer
   ARRAY(SELECT
      ROW(an_int)::my_type
      FROM a_table
   ) AS my_view_types
  FROM a_regular_table 
  WHERE my_condition_hold);
Run Code Online (Sandbox Code Playgroud)

使用版本3.7上的代码生成,我得到了一个UDT记录类MyTypeRecord和一个表记录类MyViewRecord以及UDT POJO类MyType和表POJO类MyView.

所述MyView生成的类具有的阵列MyTypeRecord.

public class MyView extends Object implements Serializable, Cloneable, IMyView {

    private static final long serialVersionUID = 1984808170;

    private final Long           some_column_id;
    private final MyTypeRecord[] my_view_types;
}
Run Code Online (Sandbox Code Playgroud)

而在POJO中我会期待一系列POJO,例如:

    private final MyType[] my_view_types;
Run Code Online (Sandbox Code Playgroud)

另一个有趣的事实是pojo和类型的记录在udt文件夹中,而对于视图,它们在tables文件夹中:也许这有助于找到解决方案/解释.

有没有办法View在世代时间进行仅限pojo的转换?


根据要求,我附上了一个工作示例,按照我的描述生成记录和POJO.它在链接与FileDropper共享.


我还报告了一个可能的伎俩,以避免这个问题,如果你真的很绝望,可以使用它.正如在这个stackoverflow问题/答案中所报告的那样,即使我们分配了POJO而不是记录,jOOQ也无法自动将记录数组转换为记录类MyTypeRecord.因此,您可以ROW使用函数将s 数组解析为json array_to_json.在我的例子中将是:

CREATE VIEW my_view
AS SELECT
   some_column_id integer
   array_to_json(ARRAY(SELECT        
        ROW(an_int)::my_type         
      FROM a_table
   ))::json AS my_view_types
  FROM a_regular_table 
  WHERE my_condition_hold);
Run Code Online (Sandbox Code Playgroud)

如果您注册绑定,这应该由jOOQ自动转换为JSON .

Luk*_*der 2

这是 jOOQ 代码生成器中的一个错误:
https ://github.com/jOOQ/jOOQ/issues/5103

它仅在 PostgreSQL 中为具有复合类型数组的表生成 POJO 时出现。我目前没有看到解决方法。