jOOQ und Autogeneration, wie man UDT-Records in Tabelle POJOs vermeidet
Ich definiere einen TypT
und ein BlickV
in einer PostgreSQL-Datenbank.
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);
Mit der Codegenerierung aufrelease 3.7 Ich bekomme beide eine UDT-RekordklasseMyTypeRecord
und eine TabellendatensatzklasseMyViewRecord
und die UDT POJO KlasseMyType
und Tabelle POJO KlasseMyView
.
DasMyView
generierte Klasse hat ein Array vonMyTypeRecord
.
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;
}
ährend ich in einem POJO bin, würde ich eine Reihe von POJOs erwarten,
private final MyType[] my_view_types;
Eine weitere interessante Tatsache ist, dass das Pojo und der Datensatz für den Typ in der @ siudt
Ordner, während sie für die Ansicht in der @ sitables
Ordner: Vielleicht kann dies helfen, eine Lösung / Erklärung zu finden.
View
eine reine Pojo-Konvertierung zur Generierungszeit?uf Anfrage habe ich ein Arbeitsbeispiel angehängt, das die von mir beschriebenen Datensätze und POJOs generiert. Sie wird mit FileDropper unter @ geteilDie Verknüpfung
Ich berichte auch über einen möglichen Trick, um dieses Problem zu vermeiden, der verwendet werden kann, wenn Sie wirklich verzweifelt sind. Wie berichtetin this stackoverflow question / answer, jOOQ, auch wenn wir anstelle des Datensatzes ein POJO zuweisen, kann das Array von Datensätzen nicht automatisch in die Datensatzklasse @ konvertiert werdeMyTypeRecord
. Daher können Sie das Array von @ analysierROW
s bis json mit der Funktionarray_to_json
. In meinem Beispiel wäre:
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);
Dies sollte automatisch von JOOQ in einen JSON konvertiert werden, wenn Sie sich registrierenDie Bindung.