Dies ist eine Lösung mit 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)
);
Hinweis, wenn Sie LEFT JOIN
stattdessen verwenden möchten (falls ein Benutzer notwendigerweise keine Rollen haben, und Sie wollen eine leere Liste pro Benutzer erhalten), Sie müssen NULL
Rollen in leere Listen selbst übersetzen.
Stellen Sie sicher, Sie aktiviert haben equals()
und hashCode()
auf POJOs zu erzeugen, um der Lage sein, sie in ein HashMap
als Schlüssel zu setzen:
<pojosEqualsAndHashCode>true</pojosEqualsAndHashCode>
Wie werden Benutzer und Rolle verbunden? Eins zu viele? Viele zu eins? Viel zu viel? –
viele-zu-viele, also ja, es gibt eine Tabelle UserToRole auch –