Jak to zrobić ręcznie
Możesz przetłumaczyć zapytanie SQL bezpośrednio do jOOQ przy użyciu DSL.row()
aby skonstruować wyrażenie wartości wiersza, a następnie:
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")
);
Zobacz także jOOQ sekcja podręcznika dotycząca IN
orzeczenie, stopień> 1
Użyj klawiszy osadzalnych
Alternatywnie możesz skorzystać z dodatkowego bezpieczeństwa typu oferowanego przez nowy jOOQ 3.14 <embeddablePrimaryKeys/>
funkcja, która umożliwia generowanie typów rekordów dla wszystkich kluczy podstawowych i ich odwołujących się kluczy obcych. Twoje zapytanie będzie wtedy brzmieć:
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();
Daje to takie samo zapytanie jak oryginalne, ale robi to bezpiecznie i nigdy więcej nie zapomnisz kolumny klucza. Nie tylko podczas zapytania o klucz podstawowy, ale także podczas dołączania do niego! Zmiana klucza spowoduje błąd kompilacji:
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();
Lub niejawne dołączenie wyglądałby tak:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();