Jak to provést ručně
Dotaz SQL můžete přeložit přímo do jOOQ pomocí DSL.row()
k vytvoření výrazu hodnoty řádku a poté:
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")
);
Podívejte se také na jOOQ manuální sekci o IN
predikát, stupeň> 1
Používejte vkládací klíče
Případně můžete profitovat z dodatečné bezpečnosti typu, kterou nabízí nový jOOQ 3.14 <embeddablePrimaryKeys/>
funkce, která umožňuje generovat typy záznamů pro všechny primární klíče a jejich odkazující cizí klíče. Váš dotaz by pak zněl:
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();
To vytvoří stejný dotaz jako váš původní dotaz, ale zadáte jej bezpečně a už nikdy nezapomenete na klíčový sloupec. Nejen, když se dotazujete na primární klíč, ale také když se k němu připojujete! Změna klíče povede k chybě kompilace:
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();
Nebo implicitní připojení bude vypadat takto:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();