java - jOOQ 和自动生成,如何避免表 POJO 中的 UDT 记录

标签 java postgresql jooq

我在 PostgreSQL 数据库中定义了一个类型 T 和一个 View 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);

使用 release 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;
}

在 POJO 中,我希望有一个 POJO 数组,例如:

    private final MyType[] my_view_types;

另一个有趣的事实是,类型的 pojo 和记录位于 udt 文件夹中,而 View 位于 tables 文件夹中:也许这可以帮助找到解决方案/解释。

有没有办法在生成时使 View 成为 pojo-only 转换?


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


我还报告了一个可能的技巧来避免这个问题,如果你真的很绝望,可以使用它。据报道in this stackoverflow question/answer ,jOOQ即使我们分配一个POJO而不是记录,也无法自动将记录数组转换成记录类MyTypeRecord。因此,您可以使用函数 array_to_jsonROW 的数组解析为 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);

如果您注册 this,jOOQ 会自动将其转换为 JSON。绑定(bind)。

最佳答案

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

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

关于java - jOOQ 和自动生成,如何避免表 POJO 中的 UDT 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35403931/

相关文章:

java - 混淆和 jOOQ

java - AWS CloudWatchEvents PutRuleRequest 的问题

django - 如何设置主键,然后转换为自动字段?

postgresql - 是否有等同于PostgreSQL的Redgate SQL Compare

postgresql - 如何在 PostgreSQL 中按自定义三个月来 date_trunc ?

java - 使用 jOOQ 创建自定义聚合函数

java - jooq-3.2.0和db2数据库

java - 在 Java 中使用线程时如何安全地递增

java - Apache Thrift 中 Java 的 int[] 和 i32 有什么区别

在线程中运行的 Java 方法