JPA Basics - Zwischentabellen Sinnvoll oder nicht?

Status
Nicht offen für weitere Antworten.
R

rocco82

Gast
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

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

Guest

Gast
Schau dir die @JoinTable Annotation an. Damit kannst du die Join-Tabelle beschreiben.
z.B.
Code:
@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>();
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben