jOOQ我可以将两个表的连接提取到相应的POJO中

mat*_*boy 13 java jooq

在jOOQ中如果我想将一行表取出到jOOQ自动生成的POJO中,例如:

dsl.selectFrom(USER)
                .where(USER.U_EMAIL.equal(email))
                .fetchOptionalInto(User.class);
Run Code Online (Sandbox Code Playgroud)

现在,假设我想要做的两个表之间,例如联接USERROLE,我怎样才能获取结果到POJO的这两个表?

Luk*_*der 26

这是一个使用的解决方案 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)
   );
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想要使用LEFT JOIN(如果用户不一定有任何角色,并且您希望每个用户获得一个空列表),则必须自己将NULL角色转换为空列表.

确保您已激活生成equals()hashCode()在POJO上,以便能够将它们放入HashMapas键:

<pojosEqualsAndHashCode>true</pojosEqualsAndHashCode>
Run Code Online (Sandbox Code Playgroud)