Как создать DSL.rowField () из RowN? - PullRequest
0 голосов
/ 24 августа 2018

В настоящее время я играю с JOOQ DSL.arrayAgg(..) и хочу запросить все PROJECTS, чтобы каждая запрашиваемая строка PROJECT имела вложенную строку со своим PROJECTMEMBERUSERS.Я должен присоединиться к USER для каждого PROJECTMEMBERUSER.USER должен быть частью той же вложенной строки, что и PROJECTMEMBERUSER.

Ниже приведен запрос, как я хочу:

db.select(
      PROJECTS.asterisk(),
      DSL.arrayAggDistinct(DSL.rowField(row(*PROJECTMEMBERUSERS.fields() + USERS.fields()))).`as`("memberusers")
)
      .from(
          PROJECTS
              .join(PROJECTMEMBERUSERS).on(PROJECTS.ID.eq(PROJECTMEMBERUSERS.PROJECTID))
              .join(USERS).on(USERS.ID.eq(PROJECTMEMBERUSERS.USERID))
      )
      .groupBy(PROJECTS.ID)

Однако DSL.rowField(row(*PROJECTMEMBERUSERS.fields() + USERS.fields())) невозможен, поскольку DSL.rowField(..) не принимает RowN (тип возврата row(..) в этом случае. Конечно, я мог бы создать строку вручную, но должен быть лучший вариант для создания строки из более чем одной таблицы.

Есть ли лучшее решение, чем созданиестрока из двух таблиц от руки?

...