【发布时间】:2016-05-26 01:00:56
【问题描述】:
我在 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);
使用 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 文件夹中,而视图位于 tables 文件夹中:也许这有助于找到解决方案/解释。
有没有办法在生成时使 View 成为 pojo-only 转换?
根据要求,我附上了一个工作示例,它按照我的描述生成记录和 POJO。它通过 this 链接与 FileDropper 共享。
我还报告了一个可能的技巧来避免这个问题,如果你真的很绝望,可以使用它。正如in this stackoverflow question/answer 报告的那样,jOOQ 即使我们分配一个 POJO 而不是记录,也无法自动将记录数组转换为记录类MyTypeRecord。因此,您可以使用函数array_to_json 将ROWs 的数组解析为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。
【问题讨论】:
-
我现在从 JavaGenerator 类中看到 UDT POJO 是在表 POJO 之后生成的。也许这是没有将它们放在表 POJO 中的原因。
标签: java postgresql jooq