Wie man dies manuell macht
Sie können Ihre SQL-Abfrage mit DSL.row()
um einen Zeilenwertausdruck zu erstellen, und dann:
row(TEST_TBL.ID_PART_1, TEST_TBL.ID_PART_2).in(
row("id_part_1_1", "id_part_2_1"),
row("id_part_1_2", "id_part_2_2")
);
Siehe auch jOOQ Handbuchabschnitt über IN
Prädikat, Grad> 1
Einbettbare Schlüssel verwenden
Alternativ können Sie von der zusätzlichen Typsicherheit profitieren, die das neue jOOQ 3.14 <embeddablePrimaryKeys/>
Funktion, mit der Sie Datensatztypen für alle Primärschlüssel und ihre referenzierenden Fremdschlüssel generieren können. Ihre Abfrage würde dann lauten:
ctx.select()
.from(TEST_TBL)
.where(TEST_TBL.TEST_TBL_PKEY.in(
new TestTblPkeyRecord("id_part_1_1", "id_part_2_1"),
new TestTblPkeyRecord("id_part_1_2", "id_part_2_2")
))
.fetch();
Dadurch wird die gleiche Abfrage wie bei Ihrer ursprünglichen erstellt, aber die Eingabe erfolgt sicher, und Sie werden nie wieder eine Schlüsselspalte vergessen. Nicht nur beim Abfragen des Primärschlüssels, sondern auch beim Joinen! Das Ändern des Schlüssels führt zu einem Kompilierungsfehler:
ctx.select()
.from(TEST_TBL)
.join(OTHER_TEST_TBL)
.on(TEST_TBL.TEST_TBL_PKEY.eq(OTHER_TEST_TBL.TEST_TBL_PKEY.TEST_TBL_FKEY))
.fetch();
Oder ein impliziter Join würde so aussehen:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();