Meine Datenbank enthält 3 Tabellen: Benutzer- und Service-Entitäten haben eine Viele-zu-Viele-Beziehung und werden wie folgt mit der Tabelle SERVICE_USER verknüpft:
USERS - SERVICE_USER - SERVICES
Die Tabelle SERVICE_USER enthält eine zusätzliche Spalte BLOCKED.
Was ist der beste Weg, um ein solches Mapping durchzuführen? Dies sind meine Entitätsklassen
@Entity
@Table(name = "USERS")
public class User implements java.io.Serializable {
private String userid;
private String email;
@Id
@Column(name = "USERID", unique = true, nullable = false,)
public String getUserid() {
return this.userid;
}
.... some get/set methods
}
@Entity
@Table(name = "SERVICES")
public class CmsService implements java.io.Serializable {
private String serviceCode;
@Id
@Column(name = "SERVICE_CODE", unique = true, nullable = false, length = 100)
public String getServiceCode() {
return this.serviceCode;
}
.... some additional fields and get/set methods
}
Ich bin diesem Beispiel gefolgt http://giannigar.wordpress.com/2009/09/04/m ... using-jpa / Hier ist ein Testcode:
User user = new User();
user.setEmail("e2");
user.setUserid("ui2");
user.setPassword("p2");
CmsService service= new CmsService("cd2","name2");
List<UserService> userServiceList = new ArrayList<UserService>();
UserService userService = new UserService();
userService.setService(service);
userService.setUser(user);
userService.setBlocked(true);
service.getUserServices().add(userService);
userDAO.save(user);
Das Problem ist, dass der Ruhezustand das Benutzerobjekt und das UserService-Objekt beibehält. Kein Erfolg mit dem CmsService-Objekt
Ich habe versucht, EAGER Fetch zu verwenden - kein Fortschritt
Ist es möglich, das erwartete Verhalten mit der oben angegebenen Zuordnung zu erreichen?
Vielleicht gibt es eine elegantere Möglichkeit, viele Join-Tabellen mit zusätzlichen Spalten zuzuordnen?
@ElementCollection
von einer (oder beiden) der Benutzer- und Service-Entitäten verwenden.[userFK, serviceFK]
Verwenden Sie eine eindeutige Einschränkung, um die Einheitlichkeit von sicherzustellen .Ich suche nach einer Möglichkeit, eine Viele-zu-Viele-Zuordnungstabelle mit zusätzlichen Spalten mit Ruhezustand in der XML-Dateikonfiguration zuzuordnen.
Angenommen, Sie haben zwei Tabellen 'a' & 'c' mit einer Zuordnung von vielen zu vielen mit einer Spalte mit dem Namen 'extra'. Da ich kein vollständiges Beispiel gefunden habe, ist hier mein Code. Hoffe es wird helfen :).
Hier sind zuerst die Java-Objekte.
Jetzt müssen wir die Zuordnungstabelle erstellen. Der erste Schritt besteht darin, ein Objekt zu erstellen, das einen komplexen Primärschlüssel darstellt (a.id, c.id).
Nun erstellen wir das Assoziationsobjekt selbst.
Zu diesem Zeitpunkt ist es an der Zeit, alle unsere Klassen mit der XML-Konfiguration im Ruhezustand abzubilden.
A.hbm.xml und C.hxml.xml (leise das gleiche).
Und dann die Zuordnungszuordnungsdatei a_c.hbm.xml.
Hier ist das zu testende Codebeispiel.
quelle
Wie bereits erwähnt, müssen Sie bei JPA zwei OneToMany-Zuordnungen anstelle einer einzelnen ManyToMany-Beziehung verwenden, um zusätzliche Spalten zu erhalten. Sie können auch eine Spalte mit automatisch generierten Werten hinzufügen. Auf diese Weise kann es bei Bedarf als Primärschlüssel der Tabelle verwendet werden.
Zum Beispiel sollte der Implementierungscode der zusätzlichen Klasse folgendermaßen aussehen:
quelle