2010-12-11 9 views
1

Technology Beschreibung: Ruhe annotation- 3.4.0.GA Java 1.5Hibernate: Assoziationskartierung ternäre

Tabelle: users_roles_branches Spalten: User_id, role_id, branch_id

ein Benutzer zugewiesen ist verschiedene Rollen für verschiedene Zweige eines Unternehmens. Jetzt

Ich habe eine Java-Klasse pojo

 public class branch 
    { 
       @ManyToMany 
      @JoinTable(name = "users_roles_branches", joinColumns = { @JoinColumn(name="branch_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") }) 
      @MapKeyManyToMany(joinColumns = { @JoinColumn(name = "user_id", unique = false) }) 

       public Map<User, Role> getUserRoleMap() { 
      return userRoleMap; 
      } 
    } 

Grundvoraussetzung ist Liste der Rollen für verschiedene Benutzer in einem Zweig zugewiesen abzurufen.

Problemstellung: Da einem Benutzer mehrere Rollen zugewiesen werden können, funktioniert die Zuordnung für Benutzerrollenzuordnungsdaten nicht.

Eine Lösung könnte Map> sein, aber ich bezweifle, wenn ich verschachtelte Sammlung mit Hibernate verwenden kann.

Bitte helfen Sie mir!

Wenn Frage nicht verständlich oder nicht in darstellbarer Form ist, lass es mich wissen.

Antwort

2

Mein Vorschlag wäre, ein neues Konzept in Ihrem Domain-Modell RoleAssignment vorstellen: sollte

class RoleAssignment { 
    private User user; 
    private Branch branch; 
    private Role role; 
} 

Entities User, Branch und Role 1 hat: N-Beziehung mit RoleAssignment. Zum Beispiel:

class User { 
    private Set<RoleAssignment> roleAssignemnts; 
} 
+1

Ich möchte vermeiden, eine Klasse zu erstellen, die nicht direkt auf eine Entität zugeordnet ist. Ihre Lösung ist machbar, aber gibt es noch eine andere Möglichkeit, um das Erstellen von weiteren Klassen außer Role, User, Branch zu vermeiden. Wie die Verwendung einer Sammlung oder eines Wrappers der Sammlung. Danke für die Antwort. –

+0

@ Maddy.Shik Hibernate scheint ternäre Assoziationen zu unterstützen. Siehe http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-ternary. Wird das für dich funktionieren? –

+0

@Entity öffentliche Klasse Firma { @Id int id; ... @OneToMany // unidirektionale @MapKeyJoinColumn (name = "employee_id") Map Verträge; } In diesem Beispiel, wenn Mitarbeiter mehrere Verträge hat, wird es nicht funktionieren, was sehr wahrscheinlich in ternäre Assoziation ist. –