Как выбрать только одну таблицу в 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);