在jOOQ中如果我想将一行表取出到jOOQ自动生成的POJO中,例如:
dsl.selectFrom(USER)
.where(USER.U_EMAIL.equal(email))
.fetchOptionalInto(User.class);
现在,假设我想在两个表之间进行连接,例如USER
和ROLE
,如何将结果提取到这两个表的POJO中?
答案 0 :(得分:21)
这是使用ResultQuery.fetchGroups(RecordMapper, RecordMapper)
Map<UserPojo, List<RolePojo>> result =
dsl.select(USER.fields())
.select(ROLE.fields())
.from(USER)
.join(USER_TO_ROLE).on(USER.USER_ID.eq(USER_TO_ROLE.USER_ID))
.join(ROLE).on(ROLE.ROLE_ID.eq(USER_TO_ROLE.ROLE_ID))
.where(USER.U_EMAIL.equal(email))
.fetchGroups(
// Map records first into the USER table and then into the key POJO type
r -> r.into(USER).into(UserPojo.class),
// Map records first into the ROLE table and then into the value POJO type
r -> r.into(ROLE).into(RolePojo.class)
);
注意,如果您想要使用LEFT JOIN
(如果用户不一定有任何角色,并且您希望每个用户获得一个空列表),那么您必须翻译{{ 1}}角色自己清空。
确保您已在POJO上激活生成NULL
和equals()
,以便能够将其作为密钥放入hashCode()
:
HashMap