jOOQ-將兩個表的連接提取到相應的POJO中

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

dsl.selectFrom(USER)
                .where(USER.U_EMAIL.equal(email))
                .fetchOptionalInto(User.class);

現在,假設我想在兩個表之間進行連接,例如USER和ROLE,如何將結果提取到這兩個表的POJO中?

最佳答案
這是一個使用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(如果用戶不一定有任何角色,並且您希望每個用戶獲得一個空列表),則必須自己將NULL角色轉換爲空列表.

確保已在POJO上激活生成equals()和hashCode(),以便能夠將它們作爲鍵放在HashMap中:

<pojosEqualsAndHashCode>true</pojosEqualsAndHashCode>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章