2017-09-12 2 views
-1

Ich habe folgenden TabellenHibernate mehrere Join-Tabelle

User (has FK_RoleKey) -> UserRole (Role Key) 
UserRoleResourceAccess(FK_RoleKey) -> UserRole(RoleKey) 
UserRoleResourceAccess (has FK_ResourceKey) -> Resource (ResourceKey Key) 

Eg Reihe:

User-> EmailId = [email protected] | FK_RoleKey = 1 
UserRole -> Role Key=1| RoleName= Admin 
Resource -> Resource Key=1 | Resource name= "page1" 
UserRoleResourceAccess -> FK_RoleKey =1 |FK_ResourceKey = 1 

Wie kann ich die Benutzer alle Privilegien erhalten (Rolle und Ressourcen) einer bestimmten Benutzerabfrage mit Hibernate Kriterien.

Kurz: Das ist, was ich in einer einzigen Hibernate Abfrage

select * from User user 
LEFT JOIN UserRole userRole 
ON user.`FK_RoleKey` = userRole.`RoleKey` 
LEFT JOIN UserRoleResourceAccess userRoleResourceAccess 
ON userRoleResourceAccess.`FK_RoleKey` = userRole.`RoleKey` 
LEFT JOIN `Resource` resource 
ON resource.`ResourceKey` = userRoleResourceAccess.`FK_ResourceKey` 
where user.`EmailID` = 'abc'; 

Antwort

0

Wie pro Ihrem Beispiel suppose E-Mail ist der PK auf Benutzertabelle zu erreichen versuchen, dann müssen Sie nur einen Benutzer aus dem Abruf Tabelle mit HQL.

Hibernate ruft automatisch die anderen Fremdschlüsseldaten ab und speichert sie für den Benutzer, wenn Ihre Zuordnungen korrekt sind. So rufen sie zurück, können Sie ...

String role = user.getUserRole().getRoleName(); 

Ebenso für Ressource. Hoffe das hilft.

+0

aber dann muss ich eine andere Abfrage schreiben, um alle Ressource bezogen auf Rollen zu erhalten, die in UserRoleResourceAccess vorhanden ist. –

+0

überprüfen Sie auch die bearbeitete Frage –

+0

könnten Sie den Code der Entität der Benutzer Tabelle hinzufügen ... haben Sie die UserRoleResourceAccess Benutzer Tabelle ordnungsgemäß mit @OnetoOne und @JoinColumn zugeordnet? Wenn ja, sollte das oben genannte SQL funktionieren und Sie können die Daten wie die Art, wie ich festgestellt habe, abrufen ... –

Verwandte Themen