У меня есть две таблицы с отношением "один ко многим", допустим, это row
и columns
, где строка может иметь много столбцов.
Используя jOOQ (3.12.3), я могу выполнить следующий запрос:
Map<JooqRowPojo, List<JooqColumnPojo>> join = dslContext.select()
.from(ROW).join(COLUMN).onKey(Keys.COLUMN__ROW_ID__FK)
.fetchAsync().thenApply(r -> {
return r.intoGroups(r1 -> r1.into(ROW).into(JooqRowPojo.class),
r1 -> r1.into(COLUMN).into(JooqColumnPojo.class));
}).toCompletableFuture().join();
Это возвращает строки, которые я ожидаю сопоставлены с Pojos, как я и ожидал.
Однако, если я попробую сделать это с необработанным SQL:
dslContext.fetch("SELECT * FROM row JOIN column ON row.row_id = column.row_id")
.intoGroups(r1 -> r1.into(ROW).into(JooqRowPojo.class),
r1 -> r1.into(COLUMN).into(JooqColumnPojo.class))
Я получаю несколько экземпляров PoJo, все значения которых равны null
, а не значения из таблицы. Я не уверен, почему я не могу сопоставить записи из необработанных sql?
NB. Это упрощенный пример поведения, которое я наблюдал, на практике мне нужно выполнить сложный запрос, который не может быть выраженным в JOOQ API / DSL.