# JPA Basics - Zwischentabellen Sinnvoll oder nicht?



## rocco82 (25. Feb 2008)

Gruß

Ich beschäftige mich gerade mit etwas JPA (in Verbindung mit Seam) und bin auf folgendes Problem gestoßen:
Die JPA lässt sich ja im Grunde sehr komfortable behandeln, klappt soweit auch ganz gut. Aber nun zu einem Design-Problem:
Ich habe ein Entity "Medium" und ein "Entity" Schlagwort. Jedes Medium kann beliebig viele Schlagworte besitzen, andersrum, jedes gespeicherte Schlagwort zeigt auf viel Medien. Ok soweit der normale Ansatz. Ich habe zwischen beiden Tabellen eine Zwischentabelle mit einen zusammengesetzten Primärschlüssel (FK vom Medium plus FK vom Schlagwort). Das wiederum bekomm ich ich aber nicht realisiert. Ich hab die zwei entity Klassen, schön Annotationen dran (@OneToMany vs. @ManyToOne) aber die JPA generiert mir da keine Zwischentabelle, sondern schreibt die Fremdschlüssel als zusätzliche Attribute in die eigenen Tabelle. Dh. zb. bei Schlagwort steht dann der FK vom referenzierten Medium drin. So warum ist das nicht schön?
Weil der Primärschlüssel der Schlagworttabelle der Name des Schlagwortes selber ist. Das heisst so kann die 1:n Beziehung zwischen Medium und Schlagwort garnicht realiseirt werden. Das Schlagwort kann so nur auf ein Medium zeigen, aber nicht auf mehre.
Es geht nur, wenn in der Schlagwort Tabelle eine integer id als Primärschlüssel mitläuft (automatsich generiert). Aber das erscheint mir sehr unsauber. Ich hätte gedacht, die JPA erzeugt selber passende Zwischentabellen, oder seh ich hier was grundlegend falsch?

Danke fürs lesen, Gruß 
need help


----------



## Angel4585 (25. Feb 2008)

klingt als bräuchtest du eine @ManyToMany Annotation oder hab ich das jetz falsch verstanden?
Du willst en m:n Beziehung realisieren oder?


----------



## byte (25. Feb 2008)

Du musst ihm schon sagen, dass Du eine Assoziationstabelle haben möchtest. Das geht mit @JoinTable.


----------



## Guest (25. Feb 2008)

Schau dir die @JoinTable Annotation an. Damit kannst du die Join-Tabelle beschreiben.
z.B.
	
	
	
	





```
@ManyToMany
@JoinTable(name = "MEDIUMSCHLAGWORT",
  joinColumns = @JoinColumn( name = "MEDIUMID", referencedColumnName = "ID" ), // ID ist die Id von Medium
  inverseJoinColumns = @JoinColumn( name = "SCHLAGWORTID", referencedColumnName = "ID" ) // ID ist die Id von Schlagwort
)
private Set<Schlagwort> schlagwortSet = new HashSet<Schlagwort>();
```


----------



## rocco82 (25. Feb 2008)

Ja super, Danke!!
Das macht Sinn.
grus


----------

