# Frage zu Hibernate und M:N Beziehung



## Guest (7. Mrz 2008)

Guten Morgen,

ich versuche gerade eine M_N Beziehung mit Hibernate herzustellen, was im Prinzip auch kein Problem darstellt.
Angenommen ich habe eine Tabelle "News" und eine Tabelle "Zeitung" und möchte diese beiden miteinander verknüpfen, erstelle ich eine Zwischentabelle in der die beiden Ids der jeweiligen Objekte vorhanden sind, soweit ist alles klar.

Was aber muss ich tun, wenn ich in dieser Zwischentabelle noch zusätzliche Felder haben möchte wie z.B. "Zeichenlänge" oder sonstige Daten die ausschliesslich auf dieser einen Beziehung beruhen?

Ich hoffe ihr habt verstanden was ich meine und könnt mir helfen ...


----------



## byte (7. Mrz 2008)

Die Assoziationstabelle ist ja nur dafür da, die Datensätze untereinander zu referenzieren. Welchen Sinn sollen da diese zusätzlichen Spalten haben? Du kannst da natürlich per SQL weitere Spalten einfügen, wüsste aber nicht, wozu das gut sein sollte.


----------



## Guest (7. Mrz 2008)

Das ich in die Tabelle per SQL weitere Spalten einfügen kann ist klar, nur wie bekomm ich die anschliessend in meine gemappten Objekte rein ist die Frage?! 

Einfaches Beispiel warum das Sinn macht wäre z.B. folgendes:

Du willst dir eine Art Bewertungsprogramm für z.B. Pizzas bei verschiedenen Bringdiensten schreiben.
Also legst du eine Tabelle mit verschiedene Pizzas an die du bei jedem Bringdienst testen willst (Salami, Thunfisch, Diabolo) und eben eine Tabelle für die Bringdienste.

Die Bewertung der Pizza kann meiner meinung nach nur in einer zwischentabelle stattfinden wo die Ids der Pizza und des Bringdienstes gehalten wird und zusätzlich eben z.B. der Integer von 1-6 für die Bewertung.

Zumindest wäre mir keine andere Möglichkeit bekannt dies so komfortabel lösen zu können ...


----------



## byte (7. Mrz 2008)

Dann machst Du Dir eine Klasse Bewertung, die eine Referenz auf eine Pizza und einen Bringdienst hält und zusätzlich ein Feld für den Punktwert der Bewertung hat.
Assoziationstabellen (JoinTable) ist nur dafür da, um z.B. in Deinem Fall Pizzen und Bringdiensten in Verbindung zu setzen.


----------



## Sergeant_Pepper (7. Mrz 2008)

@byto:
was spricht vom Design her dagegen, in einer Verknüpfungstabelle Attribute unterzubringen, die für die jeweilige Beziehung relevant sind?


----------



## Guest (7. Mrz 2008)

@Seargent_Pepper:
Offensichtlich in jedem Fall das hibernate dies nicht kann ^^

Grüße übrigens von eionem Hannoveraner zurück an einen selbigen .-P


----------



## byte (7. Mrz 2008)

Theoretisch spricht da nix gegen, aber für eine Beziehung sind nunmal keine Informationen relevant, ausser die beiden Foreign Keys. Genau das legt Hibernate halt an, wenn Du ManyToMany per JoinTable mapst.


----------



## Sergeant_Pepper (7. Mrz 2008)

byto hat gesagt.:
			
		

> Theoretisch spricht da nix gegen, aber für eine Beziehung sind nunmal keine Informationen relevant, ausser die beiden Foreign Keys.


Kann man das so pauschal sagen? Ich habe vor längerem mal zu Schulungszwecken eine Film-Datenbank angelegt, da waren Filme und Schauspieler m:n-weise verknüpft. Bei der Verknüpfung war auch die Gage gespeichert.



			
				byto hat gesagt.:
			
		

> Genau das legt Hibernate halt an, wenn Du ManyToMany per JoinTable mapst.


Hibernate ist für mich ganz neu, mein Posting bezog sich eher auf den reinen DB-Aspekt.


----------



## byte (7. Mrz 2008)

Sergeant_Pepper hat gesagt.:
			
		

> byto hat gesagt.:
> 
> 
> 
> ...


Ja das kann man so schon sagen. Du brauchst halt nichts anderes als die beiden FKs, um zwei Datensätze in Beziehung zueinander zu bringen. Ob man nun noch weitere Daten in so einer Tabelle speichert oder nicht, muss sich wohl jeder selbst überlegen. Ich bin kein DB-Experte. Für mich steht das Java-Objektmodell im Vordergrund. Mit diesem fange ich auch an und nicht mit der Datenbank. Wenns geht, lass ich das DB-Schema von Hibernate generieren. 
Wenn es zusätzliche Informationen gibt, die für eine Beziehung zweier Objekte relevant sind, dann kapsel ich das schon alleine auf Java-Seite in einer eigenen Klasse. Und wenn ich einfach nur eine Assoziation zw. zwei Objekten habe, dann mappe ich das und Hibernate legt selbstständig bei Bedarf den JoinTable an.


----------



## Guest (8. Mrz 2008)

Gab's hier vor einiger Zeit... um mich nicht zu wiederholen, siehe: http://www.java-forum.org/de/viewtopic.php?t=46810


----------

