Hibernate ManyToManyToMany?

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hi-Ho,

um eine Zuordnungstabelle von A und B in Hibernate darzustellen, versehe ich die jeweiligen Listen mit ManyToMany Annotations, also bspw.:

Pseudocode
Code:
public class A {

  @ManyToMany // Konfiguration, kenn ich nicht auswendig
  private Set[B] bs;
}

public class B {

  @ManyToMany // Konfiguration, kenn ich nicht auswendig
  private Set<A> as;
}

Und bekomme eine Zuordnungstabelle mit zwei Spalten, wo eine A_ID einer B_ID zugeordnet wird.

Zuordnungs-Tabelle
Code:
|A_ID|B_ID|
-----------
|1   |2   |
|1   |3   |
|5   |2   |

Was mache ich jetzt aber, wenn ich keine zwei Spalten in meiner Zuordnungstabelle möchte, sondern N (oder konkret 3)? Also dass ein A beliebig viele Bs und Cs haben kann, ein B beliebig viele As und Cs und ein C beliebig viele As und Bs, und ich anschließend so eine Tabelle haben möchte:

Zuordnungs-Tabelle
Code:
|A_ID|B_ID|C_ID|
----------------
|1   |2   |5   |
|1   |3   |5   |
|5   |2   |2   |

:?:

Ich würde mir nur ungern eine weitere Klasse (oder sogar zwei) für diese Zuordnungstabelle anlegen.

Danke!
 

GilbertGrape

Bekanntes Mitglied
Also ich würde sagen, du musst dir eine weitere Klasse (Verknüpfungstabelle) anlegen. Dann hast du ja überall nur OneToMany-Beziehungen. Ich denke, das ist auch übersichtlicher als wenn du 3 Klassen mit jeweils 2 ManyToMany-Beziehungen hast.
 

byte

Top Contributor
Ich wüsste auch nicht, wie das mit @JoinTable funktionieren sollte. Aber mich würde mal interessieren, warum Du so ein komplexes Mapping überhaupt aufbauen willst? Reicht es nicht, wenn A die Bs kennt, B die Cs und C die As? Wenn Du dann direkt von A auf C zugreifen willst, könntest Du einfach delegieren (A.B.C). Analog, wenn C auf B zugreifen will (C.A.B) usw.
Die Mappings müssten nicht mal bidirektional sein und Du sparst Dir vor allem viele Joins oder Selects beim Laden der Datensätze!
 

The_S

Top Contributor
Also mit ManyToMany geht. Das Problem hierbei ist aber, dass ich dann zwar einem A ein B und ein C zuweisen kann, aber nicht einem A ein B+C (also nur getrennt voneinander).

GilbertGrape hat gesagt.:
Also ich würde sagen, du musst dir eine weitere Klasse (Verknüpfungstabelle) anlegen. Dann hast du ja überall nur OneToMany-Beziehungen. Ich denke, das ist auch übersichtlicher als wenn du 3 Klassen mit jeweils 2 ManyToMany-Beziehungen hast.

Ja, dazu bin ich übergegangen. War gestern Abend nur ne Schnappsidee von mir ;) . Problem hierbei: Ein FK kann kein PK sein, deshalb würde ich noch eine weitere ID in der Tabelle benötigen (was nicht gewünscht ist).

@byto

Und wie könnte ich dann eindeutige Sagen: Zu diesem A gehört dieses B und dieses C?

Danke!
 

byte

Top Contributor
Falls mir die 38° Fieber grade keinen Streich spielen, sollte das doch eindeutig sein (jeweils unidirektionale OneToMany)!?

A ----* B ----* C ----*A
 

The_S

Top Contributor
Hm ... da könntest du recht haben. Aber ich hab dann wohl keine A_B_C-Tabelle - was aber zwingend notwendig ist (zwecks Datenmigration).

Also es ist schon gelöst - mit einer zusätzlichen Klasse ABCId, die als Embeddable markiert ist, und sich darum kümmert. Diese zusätzliche Klasse würde ich aber dennoch gerne vermeiden.
 

GilbertGrape

Bekanntes Mitglied
Hobbit_Im_Blutrausch hat gesagt.:
Problem hierbei: Ein FK kann kein PK sein, deshalb würde ich noch eine weitere ID in der Tabelle benötigen (was nicht gewünscht ist).

Wenn man das mit einer EmbeddedId macht, geht das doch oder? Danm brauchst du keine zusätzliche Id.

Edit: Ok, jetzt hast dus ja schon so gemacht :)
 

The_S

Top Contributor
jop - aber irgendwie stört mich diese zusätzliche Klasse ... bäh :p . Kann man die als static nested class definieren?
 

byte

Top Contributor
Jo, kannste machen. Musst die Klasse dann halt so in der Config angeben: de.test.Foo$Bar
 

The_S

Top Contributor
Noch nicht ganz gelöst:

In A habe ich ein Set meiner Zuordnungstabelle. Wenn ich jetzt ein A lösche, dann sollen gleichzeitig alle Einträge in der Zuordnungstabelle, die A enthalten, gelöscht werden. Wie mach ich das? CascadeType.ALL bzw. CascadeType.REMOVE bei der Definition des Sets in der Zuordnungstabelle funktioniert leider nicht.

Danke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Hibernate/Spring JPA: eigene ID generieren Data Tier 5
Avalon @ManyToOne Hibernate oder JPA? Data Tier 5
D Hibernate Hibernate mit MariaDB Data Tier 1
ToBJo Hibernate Glassfish deploy mit Hibernate schlägt fehl Data Tier 1
C JPA Hibernate Map<String,String> richtig mappen Data Tier 2
S JPA Hibernate Search & EclipseLink (oder OpenJPA) Data Tier 0
R JPA Probleme mit Wechsel von EclipseLink auf Hibernate Data Tier 4
ARadauer Hibernate Entität readonly laden... Data Tier 1
G Hibernate SQL in Hibernate: Keine Parameter mit Index? Data Tier 2
P Wildfly + Hibernate + SQL Server Data Tier 0
E JPA Hibernate Query mit Timestamp hat seltsames Verhalten Data Tier 1
M Eclipse 4 RCP Hibernate Problem Data Tier 3
C Hibernate ProgressBar updaten mit Daten aus Hibernate Data Tier 4
B Hibernate und MySQL testen Data Tier 8
I Hibernate HQL: generiertes SQL ausgeben Data Tier 1
R mapping-file für hibernate zum Überschreiben der Annotationen Data Tier 7
R Hibernate Hibernate und Logback Data Tier 2
R Hibernate möchte Schema zwei mal undeployen Data Tier 2
F Hibernate Hibernate / JPA Data Tier 4
E Hibernate: Session vs EntityManager Data Tier 3
C Hibernate Hibernate Code Generation Data Tier 3
S Hibernate Mehrfachverbindung mit Hibernate Data Tier 3
M Hibernate Einstiegsfrage Data Tier 5
M Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message Data Tier 4
S Hibernate Einstieg in Hibernate 3.2 sinnvoll? Data Tier 8
P JPA Eigene Vererbungsstrategie mit JPA / Hibernate Data Tier 2
J Hibernate Problem bei Master-Detail-Tabellen Data Tier 5
Y Jboss seam-hibernate-jpa Data Tier 5
RaoulDuke Hibernate Map<String,String> mit Annotations mappen Data Tier 2
M Hibernate Hibernate with GWT Data Tier 4
C Hibernate JPA mysql db erstellen Data Tier 4
M Hibernate Hibernate liest Daten zu oft aus! Data Tier 16
pg1337 Hibernate Fragen Data Tier 11
D Probleme bei Left Joins mit Hibernate createCriterias() Data Tier 2
D Hibernate probleme mit Verlinkungstabelle Data Tier 4
2 Hibernate Annotations Data Tier 7
G Hibernate select update no wait Data Tier 8
Z Hibernate: Many-To-Many nur eine bestimmte Spalte Data Tier 3
K Hibernate - Envers - Erzeugung der SQL Skripte Data Tier 4
G Hibernate 1:n Beziehung mit Vererbung Data Tier 5
D Hibernate-Criteria-API (Projections und MAX-Funktion) Data Tier 6
L Hibernate: failed to lazily initialize a collection of role Data Tier 3
S Hibernate hibernate.cfg.xml Data Tier 14
D JPA vs Hibernate.cfg und Entitymanager Data Tier 6
H Hibernate - Mapping für Enumeration Data Tier 1
R Hibernate Criteria Abfrageproblem Data Tier 2
A Hibernate und jdbc zusammen Data Tier 4
D Mit Hibernate aus JUnit ein DB-Schema erzeugen Data Tier 6
S [Hibernate] No Persistence provider for EntityManager Data Tier 5
B Problem mit org.hibernate.LazyInitializationException Data Tier 11
G Hibernate HQL und Interface Data Tier 4
G JSF Hibernate no session or session was closed Data Tier 12
T JPA2/Hibernate: Many-to-Many-Relation wird u.a. beim löschen nicht aktualisiert Data Tier 14
S (Hibernate) Mapping einer Datenbanktabelle mit mehreren Fremdschlüssel Data Tier 7
X [Hibernate] Zusammengesetzte Entities möglich? Data Tier 7
N Hibernate Fake? Data Tier 2
S Problem beim Insert mit Hibernate Data Tier 9
V Hibernate Projection Data Tier 2
T org.hibernate.impl.SessionFactoryImpl Memory Leak Data Tier 10
G Hibernate Composite key Data Tier 11
X [Hibernate] Connection Pool - MinSize ? Data Tier 2
R Hibernate Criteria OR Data Tier 2
T hibernate/jpa abgefragte Listen immer mit Null-Werten gefüllt Data Tier 8
X [Hibernate] Anderen Connection Pool - Vorschläge? Data Tier 3
ARadauer Hibernate DDL Loggen Data Tier 6
G Hibernate abfrage Collection Data Tier 3
X [Hibernate] ReverseEngineering - Eigene Strategy verwenden? Data Tier 3
R Hibernate Criteria .group größer als Data Tier 5
R Hibernate daten laden Data Tier 7
H [Hibernate]1:1 Beziehung Data Tier 8
H [Hibernate]No CurrentSessionContext configured! Data Tier 6
X [Hibernate] Lässt sich die Dauer eines SELECTs loggen? Data Tier 4
R Hibernate n:n Relationtabelle mit Date Data Tier 3
H [Hibernate] Unknown Entity Data Tier 3
H [Hibernate] Configuration Data Tier 3
C [Hibernate] Generierung von hbm.xml to Java Data Tier 4
lumo Eclipse & JPA & Hibernate & Derby Data Tier 5
J Zufallsauswahl aus ResultList bei JPA(Hibernate) / Performance Data Tier 3
M Hibernate: Datum 0001-01-01 erzeugt null-Datum Data Tier 4
G Datenbankzugriff mit Hibernate Data Tier 7
Y Hibernate - Angabe des Schemas Data Tier 6
LadyMilka (Hibernate) in Criteria implizierter Join durch Subquery's Data Tier 8
M Hibernate Mehr als 1 Object speichern? Data Tier 18
M Unerklärliche Hibernate Exception Data Tier 20
LadyMilka (Hibernate) subquery in FROM-Clause Data Tier 9
haemi Viele DTOs in hibernate IdentityMap Data Tier 3
LadyMilka (hibernate) UNION dem Dialekt hinzufügen Data Tier 3
M Hibernate + Oracle 10g XE Data Tier 3
lumo Hibernate - entity class not found Data Tier 5
P SQL PRoblem Hibernate? Data Tier 8
J Vererbung mit JPA / Hibernate - pro/contra Data Tier 3
T JBoss/Hibernate: Abfrage dauert lang + hohe CPU? Data Tier 19
7 Hibernate-Abfrage (SubSelect im FROM) Data Tier 2
G Hibernate: many-to-one - Verwaiste Datensätze löschen Data Tier 2
G Layer für Datenbankzugriff Hibernate Data Tier 5
G Hibernate Zwischentabelle Data Tier 2
Java.getSkill() Hibernate und Spalte vom Typ xml Data Tier 6
G Hibernate 0...1 : 1 Beziehung Data Tier 6
G Hibernate mehrere @oneToone Data Tier 2
G Hibernate 1:n, 1:1 Data Tier 26

Ähnliche Java Themen

Neue Themen


Oben