Как выбрать только одну таблицу в jOOQ с помощью запроса с соединением?
У меня есть следующий запрос в jOOQ:
factory()
.select()
.from(PERSON)
.join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID))
.where(ENDUSER.ID.equal(userId))
.fetchOne();
Этот запрос возвращает мне запись со всеми столбцами из PERSON и ENDUSER, но мне нужны только колонки из PERSON (вот почему я помещаю .from(PERSON)
, а не .from(PERSON, ENDUSER)
).
Я знаю, что это не имеет большого значения, но я не хочу возвращать ненужные поля.
Ответы
Ответ 1
Вы можете получить доступ к полям в PERSON
с помощью метода Table.fields()
:
factory()
.select(PERSON.fields()) // Or getFields() in jOOQ 2.x
.from(PERSON)
.join(ENDUSER)...
Это примерно то же самое, что писать
SELECT PERSON.*
FROM PERSON
JOIN ENDUSER ...
Другой вариант - фактически перечислить все поля от человека один за другим.
Ответ 2
Ответ Лукаса был именно тем, что я искал. Вы также можете использовать метод into()
для получения строго типизированного объекта ответа только для таблицы, в которой вы нуждаетесь (вместо общего типа Record
):
PersonRecord record = factory()
.select()
.from(PERSON)
.join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID))
.where(ENDUSER.ID.equal(userId))
.fetchOne()
.into(PERSON);