Ternäre (und n-ary -) Beziehungen in Hibernate
Q 1) Wie können wir das Modell einer ternären Beziehung mit Hibernate? Zum Beispiel, wie können wir das Modell der ternären Beziehung vorgestellt hier Einsatz von Hibernate (oder PPV)?
HINWEIS: ich weiß, dass JPA 2 hat einige zusätzliche Konstrukte für Gebäude ternäre Beziehungen mit Karten. Jedoch, dieser Frage nimmt JPA 1 oder Hibernate 3.3.x und ich weiß nicht, wie die Karten verwendet werden, um dieses Modell.
(Quelle: grussell.org)
(Quelle: grussell.org)
Idealerweise bevorzuge ich mein Modell so sein:
class SaleAssistant {
Long id;
//...
}
class Customer {
Long id;
//...
}
class Product {
Long id;
//...
}
class Sale {
SalesAssistant soldBy;
Customer buyer;
Product product;
//...
}
Q 1.1)
Wie können wir das Modell dieser Variante, in der jeder Artikel möglicherweise haben viele Produkte?
class SaleAssistant {
Long id;
//...
}
class Customer {
Long id;
//...
}
class Product {
Long id;
//...
}
class Sale {
SalesAssistant soldBy;
Customer buyer;
Set<Product> products;
//...
}
Q 2) Im Allgemeinen, wie können wir das Modell n-Fach, n >= 3 Beziehungen mit Hibernate?
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde renovieren den Verein mit einer intermediate entity-Klasse (und das ist die empfohlene Methode mit Hibernate). Angewendet auf dein Beispiel:
Ich würde nicht verwenden Sie einen zusammengesetzten Primärschlüssel hier und die Einführung einer PK für die
Sale
Einheit.Ich denke, dass meine Antwort auf Q1. deckt diese. Falls nicht, bitte klären.
Update: Beantwortung der Kommentare von der OP
Müssen Sie erstellen eine neue
Pk
(ich entfernt die Konstruktoren von meiner ursprünglichen Antwort für Prägnanz), und legen Sie es auf derSale
Element. Ich würde so etwas tun:- Und dann bestehen die
sale
.Den Spalten für die Attribute des zusammengesetzten
Pk
(d.h. der Verkauf-Tabelle die Spalte "Namen"), wollen wir Sie erhalten, PK und FK Einschränkungen.Sind Sie mit Datenbank generierten Primärschlüssel für Kunden -, Produkt-und SalesAssistant? Das könnte dazu führen, ein Problem, da es sieht aus wie Sie versuchen, verwenden Sie die aktuelle DB-Identitäten anstatt Hibernate auflösen der Objektreferenzen, die während der Persistenz.
Eingebetteten PK oben sieht seltsam für mich persönlich, aber ich habe nicht hatte eine chance, um es auszuprobieren. Wie es scheint, Spalten sich überlappen und Stress miteinander.
Ich würde denken, es reicht einfach nur die ManyToOne Referenzen.
Auch, schalten Sie die SQL-Anweisung zu Debuggen und zu sehen, was ' s an die DB.