2009-04-23 11 views
1

My vereinfachte Entity Szenario ist wie folgt:Ruhezustand - @ManyToMany mit zusätzlichen Feldern in Mapping-Entity

eine Person, ein Unternehmen in einer bestimmten Rolle zugeordnet ist (Gähnen).

Mein erster Gedanke war, eine ManyToMany-Beziehung zwischen PERSON und COMPANY zu konfigurieren. Wie auch immer, ich kann den ROLE-Typ in der ROLE-Tabelle nicht mit angeben (als ein anderes Feld die beiden Fremdschlüssel).

Ich bestätige, dass der richtige Weg, dies zu tun ist, zwei OneToMany-Beziehung zu verwenden und die ROLE als eine Einheit für sich selbst (answered already on stackoverflow).

Aber das ist, wo ich stecke: Ich benutze ein HTML-Formular, um eine Person zu einem Unternehmen hinzufügen und wählen Sie die entsprechende Rolle, wie kann ich dies in der Datenbank speichern oder besser: Wie sage ich Hibernate, um es zu speichern . Eine Person hat eine Liste und so auch das Unternehmen. Eine Rolle hat eine Person und eine Firma. Wie treffen sie sich in der Mitte? Also im Grunde, was ich frage:

Wie ist die genaue Hibernate Mapping-Konfiguration, so dass ich eine Person mit einer Rolle in einem Unternehmen in einem Schritt speichern kann?

Antwort

1

Schauen Sie sich Kaskadierung und Tabellenvererbung an. Zum Beispiel würde der folgende Code drei Tabellen repräsentieren. Eine Firmentabelle, eine Rollentabelle mit einer CATG- und einer User-Tabelle. Die Rollentabelle würde die Vererbung einzelner Tabellen verwenden, wobei die CATG durch den Ruhezustand verwaltet wird und der Ruhezustand die richtige Klasse basierend auf dem CATG-Spaltenwert und dem Mapping erstellt. Und Kaskadierung würde die Rolle gleichzeitig mit dem Benutzer einfügen.

@Table(name = "USER") 
Public User 
{ 


    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn( cascade = CascadeType.ALL, name="ROLE_NAME") 
    private CompanyRole role; 

} 

@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="CATG", discriminatorType=DiscriminatorType.STRING) 
@Table(name = "Role") 
public Role 
{ 

} 

@DiscriminatorValue("CMPY_ROLE") 
public CompanyRole extends Role 
{ 

    private Company company 
} 

@Table(name = "COMPANY") 
Public Company 
{ 
} 
+0

Ok, ich folgte Ihrem Rat, danke! Ich füge jetzt eine ROLLE mit bereits existierendem PERSON und COMPANY ein. Dies ist in Ordnung, da beides ohne ROLE-Beziehung möglich ist und auch existieren kann. Ich konfigurierte zwei @ OneToMany-Zuordnungen in den Klassen PERSON und COMPANY plus zwei @ ManyToOne-Zuordnungen in der Klasse ROLE. Ich bin nicht so sicher über die Datenintegrität, aber es funktioniert wie gewünscht. Definitiv interessante Aspekte, die Vererbung und Kaskadierung für diese Art von Situationen verwenden. Danke noch einmal! – Wolfram

Verwandte Themen