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

时间:2012-12-28 19:05:15

标签: java mysql 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)的原因)。 我知道这并不重要,但我不希望返回不必要的字段。

2 个答案:

答案 0 :(得分:14)

您可以通过PERSON方法访问Table.fields()中的字段:

factory()
.select(PERSON.fields()) // Or getFields() in jOOQ 2.x
.from(PERSON)
.join(ENDUSER)...

这与编写

大致相同
SELECT PERSON.*
FROM PERSON
JOIN ENDUSER ...

另一种选择是实际列出人员中的所有字段

答案 1 :(得分:7)

Lukas的答案正是我所寻找的。您还可以使用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);