これを手動で行う方法
DSL.row()
行の値の式を作成するには、次のようにします。
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")
);
jOOQも参照してください。 IN
に関するマニュアルセクション 述語、次数> 1
埋め込み可能なキーを使用する
または、新しいjOOQ 3.14 <embeddablePrimaryKeys/>
この機能を使用すると、すべての主キーとそれらを参照する外部キーのレコードタイプを生成できます。クエリは次のようになります:
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();
これにより、元のクエリと同じクエリが生成されますが、安全に入力できるため、キー列を二度と忘れることはありません。主キーを照会するときだけでなく、主キーに参加するときも!キーを変更すると、コンパイルエラーが発生します:
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();
または、暗黙的な結合 次のようになります:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();