jOOQ e geração automática, como evitar registros UDT dentro da tabela POJOs
Eu defino um tipoT
e uma vistaV
em um banco de dados PostgreSQL.
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);
Usando a geração de código emrelease 3.7 Eu recebo uma classe de registro UDTMyTypeRecord
e uma classe de registro de tabelaMyViewRecord
e a classe UDT POJOMyType
e classe de mesa POJOMyView
.
oMyView
classe gerada tem uma matriz deMyTypeRecord
.
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;
}
enquanto em um POJO eu esperaria uma variedade de POJOs, por exemplo:
private final MyType[] my_view_types;
Outro fato interessante é que o pojo e o registro para o tipo estão noudt
pasta, enquanto na exibição eles estão notables
pasta: talvez isso ajude a encontrar uma solução / explicação.
View
uma conversão apenas de pojo no tempo de geração?Mediante solicitação, anexei um exemplo de trabalho que gera os registros e POJOs como descrevi. É compartilhado com o FileDropper emesta ligação.
Também relato um possível truque para evitar esse problema, a ser usado se você estiver realmente desesperado. Como reportadonesta pergunta / resposta stackoverflow, jOOQ, mesmo se atribuirmos um POJO em vez do registro, não será possível converter automaticamente a matriz de registros na classe de registroMyTypeRecord
. Portanto, você pode analisar a matriz deROW
s para json usando a funçãoarray_to_json
. No meu exemplo seria:
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);
Isso deve ser convertido automaticamente pelo jOOQ em um JSON se você se registraresta obrigatório.