我想获取一个User对象,如下所示:
record User(
UUID id,
String username,
String ipAddress,
long lastJoinAt,
long createdAt,
long updatedAt,
GuildMembersRecord guildMember
) {}
record GuildMembersRecord(
UUID id,
UUID guildId,
UUID userId,
String role,
OffsetDateTime updatedAt
OffsetDateTime createdAt,
) {}
我的问题是公会成员总是空的,但是我可以在单独搜索的时候找到它。公会成员是拥有方,我的用户是引用方。我试图通过引用方来获得公会成员。
我的疑问是这样的:
UUID key = UUID.randomUUID();
this.context.select(
USERS.ID,
USERS.USERNAME,
USERS.IP_ADDRESS,
USERS.LAST_JOIN_AT,
USERS.CREATED_AT,
USERS.UPDATED_AT,
row(
DSL.select(GUILD_MEMBERS)
.from(GUILD_MEMBERS)
.where(GUILD_MEMBERS.USER_ID.eq(key))
).convertFrom(r -> r.into(GUILD_MEMBERS).into(GuildMembersRecord.class))
)
.from(USERS)
.where(USERS.ID.eq(key))
.fetchOne(Records.mapping(User::new))
1条答案
按热度按时间bf1o4zei1#
这听起来类似于最近的support request #14174,其中用户正在寻找一种使用
row(Select)
来Map单个记录的方法。这似乎是一个合理的期望,类似于multiset(Select)
value constructor,但正如这在标准SQL中不可用一样,它在jOOQ中以这种特定形式不可用。最简单的方法是使用
field(Select<R>):Field<R>
将Select
转换为scalar correlated subquery:请注意,在本例中,不需要ad-hoc conversion或记录Map,因为您已经是projecting the entire table reference
GUILD_MEMBERS
,这将生成预期的GuildMembersRecord