Cách thực hiện việc này theo cách thủ công
Bạn có thể dịch trực tiếp truy vấn SQL của mình sang jOOQ bằng cách sử dụng DSL.row()
để xây dựng một biểu thức giá trị hàng và sau đó:
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")
);
Xem thêm jOOQ phần thủ công về IN
vị ngữ, mức độ> 1
Sử dụng các khóa có thể nhúng
Ngoài ra, bạn có thể thu lợi từ loại an toàn bổ sung được cung cấp bởi jOOQ 3.14 mới <embeddablePrimaryKeys/>
tính năng này cho phép bạn tạo các loại bản ghi cho tất cả các khóa chính và khóa ngoại tham chiếu của chúng. Truy vấn của bạn sau đó sẽ đọc:
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();
Điều này tạo ra cùng một truy vấn với truy vấn ban đầu của bạn, nhưng nhập một cách an toàn và bạn sẽ không bao giờ quên một cột chính nữa. Không chỉ khi bạn truy vấn khóa chính, mà còn khi bạn tham gia khóa đó! Thay đổi khóa sẽ dẫn đến lỗi biên dịch:
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();
Hoặc tham gia ngầm sẽ giống như thế này:
ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
.from(OTHER_TEST_TBL)
.fetch();