我正在尝试获取记录(参与记录)以及相关记录(与会者)的列表。我想将它们全部存储为记录,但似乎无法让它发挥作用。我在网上看到的所有多重集示例都只使用几个字段而不是整个记录。如果这有区别的话,这也在 Kotlin 中。
请参阅下文,了解我正在尝试执行的操作,但它不起作用。
context.select(
ENGAGEMENT_NOTE.asterisk(),
multiset(
select()
.from(ENGAGEMENT_NOTE_ATTENDANCE)
.join(ENGAGEMENT_NOTE_ATTENDEE).on(ENGAGEMENT_NOTE_ATTENDANCE.ATTENDEE_ID.eq(ENGAGEMENT_NOTE.ID))
.where(ENGAGEMENT_NOTE_ATTENDANCE.ENGAGEMENT_NOTE_ID.eq(ENGAGEMENT_NOTE.ID))
).convertFrom { it.into(ENGAGEMENT_NOTE_ATTENDEE) }
.`as`("attendees")
)
.from(ENGAGEMENT_NOTE)
.where(ENGAGEMENT_NOTE.ID.eq(noteId.value))
.fetchOne()
?.map {
EngagementNoteView(
it.into(ENGAGEMENT_NOTE),
it.getValue("attendees") as List<EngagementNoteAttendeeRecord> // This is definitely wrong.
)
}
selectFrom(Table<R>)
返回 Result<R>
,而不是 select().from(table)
。
即将推出的 jOOQ 3.19 多路径表达式以及隐式路径相关性将使这变得超级简单:
context
.select(
// You can use a Table<R> as a SelectField<R>
ENGAGEMENT_NOTE,
multiset(
// jOOQ 3.19 many-to-many implicit join path correlation
selectFrom(ENGAGEMENT_NOTE.engagementNoteAttendee())
).`as`("attendees")
.from(ENGAGEMENT_NOTE)
.where(ENGAGEMENT_NOTE.ID.eq(noteId.value))
.fetchOne()
Table<R>
作为 SelectField<R>
在 jOOQ 3.18 中,多对多路径表达式和隐式路径关联尚不可用,因此您必须手动滚动关联。例如,如果您的 RDBMS 支持关联派生表,您可以使用半连接:
context
.select(
ENGAGEMENT_NOTE,
multiset(
selectFrom(ENGAGEMENT_NOTE_ATTENDEE)
.where(ENGAGEMENT_NOTE_ATTENDEE.ID.in(
select(ENGAGEMENT_NOTE_ATTENDANCE.ATTENDEE_ID)
.from(ENGAGEMENT_NOTE_ATTENDANCE)
.where(ENGAGEMENT_NOTE_ATTENDANCE.ENGAGEMENT_NOTE_ID
.eq(ENGAGEMENT_NOTE.ID))
))
).`as`("attendees")
.from(ENGAGEMENT_NOTE)
.where(ENGAGEMENT_NOTE.ID.eq(noteId.value))
.fetchOne()