如何使用带有连接的查询从jOOQ中的一个表中进行选择?

2022-09-04 08:19:24

我在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

您可以通过以下方法访问 中的字段:PERSONTable.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);

推荐