# Many to Many mit JoinTable



## PollerJava (22. Mai 2014)

Hallo,

ich hab eine etwas schräge Frage und zwar hat schon mal jemand eine Many to Many Verbindung in Hibernate gemacht und dazu an der M:N- Table noch eine Zusatztabelle angehängt, so in der Art:


```
Taxi --------- m:n ----------- Gruppe
                      |
                      |
                ZusatzInfo
```

Taxis können gruppiert werden (ein Taxi in mehreren Gruppen und eine Gruppe hat ein bis mehrere Taxis) und zusätzlich mächte ich noch speichern, ob ein Taxi, welches sich in einer bestimmten Gruppe befindet, mittels Brief oder Telefonisch Informationen erhalten hat.

Hat das schon mal jemand in Hibernate umgesetzt? konnte nichts googeln, komm da immer nur zu einfache m:n Verbindungen.
Vielen Dank für Euer infos.
lg
Poller


----------



## stg (22. Mai 2014)

Meine Antwort bezieht sich nicht direkt auf Hibernate, sondern allgemein auf die JPA-Spec.

Da du Zusatzinformationen ablegen willst, wirst du um die Erstellung einer zusätzlichen Entity-Klasse nicht drumherum kommen. Im Grunde hast du dann zwei gewöhnliche 1:n-Beziehungen zwischen Taxi bzw Gruppe und der CrossRefTable. In etwa so:


```
@Entity
public class TaxiToGroup implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    protected TaxiToGroupPK;

    @JoinColumn(name = "GROUP_ID", referencedColumnName = "ID", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Group group;

    @JoinColumn(name = "TAXI_ID", referencedColumnName = "ID", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Taxi taxi;

   // ... 
}
```


```
@Embeddable
public class TaxiToGroupPK implements Serializable {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Basic(optional = false)
    @NotNull
    @Column(name = "TAXI_ID")
    private Long taxiId;
    @Basic(optional = false)
    @NotNull
    @Column(name = "GROUP_ID")
    private Long groupId;
}
```


----------



## Joose (22. Mai 2014)

stg hat gesagt.:


> Da du Zusatzinformationen ablegen willst, wirst du um die Erstellung einer zusätzlichen Entity-Klasse nicht drumherum kommen. Im Grunde hast du dann zwei gewöhnliche 1:n-Beziehungen zwischen Taxi bzw Gruppe und der CrossRefTable. In etwa so:



Korrekt! m:n Verbindungen werden für gewöhnlich mit Hilfe einer extra (Zwischen)Tabelle aufgelöst.
Der Grund ist ganz einfach das viele Datenbanken M:N nicht abbilden können (Primary Key usw.)


----------

