Questa è una soluzione che utilizza 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)
);
nota, se si desidera utilizzare LEFT JOIN
invece (nel caso in cui un utente non deve necessariamente tutti i ruoli, e si desidera ottenere una lista vuota per utente), dovrai tradurre i ruoli NULL
in una lista vuota.
Assicurarsi di aver attivato la generazione equals()
e hashCode()
sul tuo POJO in modo da essere in grado di metterli in un HashMap
come chiavi:
<pojosEqualsAndHashCode>true</pojosEqualsAndHashCode>
fonte
2016-07-07 07:34:56
Come vengono utente e ruolo collegato? Uno-a-molti? Molti-a-uno? Molti-a-molti? –
molti-a-molti, quindi sì, c'è un tavolo UserToRole anche –