Hallo liebe Freunde,
ich muss gerade eine Aufgabe lösen, bei der ich entweder noch nicht die richtige Literatur gefunden habe oder mich nicht klug genug anstelle.
Es geht um die Realisierung eines many-to-many zugriffs über eine vorhandene Verbindungstabelle:
Tabelle Person
personID(PK)
Name
Vorname
...
Tabelle PersonAdr
ID(PK)
personID(FK)
adressid(FK)
adrTypID(FK)
emailID(FK)
...
Tabelle Adresse
adressid(PK)
Ort
PLZ
Strasse
HausNr
...
Die Verbindungstabelle enthält außer den beiden FKs weitere FKs auf andere Tabellen, ist also nicht die Standardimplementierung "Person_Adresse".
Ich will nun in der EJB Person eine Liste List<Adresse> adressen mit den vorhandenen Adressen haben. Dazu habe ich folgendes codiert:
Klasse "Person"
...
Kernpunkt soll hier die @JoinTable - Annotation sein. Sie verweist nicht auf die Tabelle "Person_Adresse" als Standard (darüber würde es funktionieren), sondern auf die spezielle, schon vorhandene Verknüpfungstabelle. In joinColumns und inverseJoinColumns werden die passenden PKs und FKs angegeben.
Klasse "Adresse"
...
Wenn ich die Applikation starte, bleibt die Liste mit den Adressen leer. Zur Kontrolle habe ich ein SQL Statement geschrieben und geprüft, ob die Tabelleninhalte richtig sind. Das war OK.
Wo ist hier mein Denkfehler?
Frage: Brauche ich eine EJB "PersonAdr"? Wenn ich über den Standard "Person_Adresse" war das nicht nötig?
Frage: Wann wird denn aus der Verbindungstabelle ausgewertet? Ich rufe derzeit aus einem Servlet getAdressen() auf. Reicht das aus?
Warum ist meine Liste List<Adresse> adressen leer?
ich muss gerade eine Aufgabe lösen, bei der ich entweder noch nicht die richtige Literatur gefunden habe oder mich nicht klug genug anstelle.
Es geht um die Realisierung eines many-to-many zugriffs über eine vorhandene Verbindungstabelle:
Tabelle Person
personID(PK)
Name
Vorname
...
Tabelle PersonAdr
ID(PK)
personID(FK)
adressid(FK)
adrTypID(FK)
emailID(FK)
...
Tabelle Adresse
adressid(PK)
Ort
PLZ
Strasse
HausNr
...
Die Verbindungstabelle enthält außer den beiden FKs weitere FKs auf andere Tabellen, ist also nicht die Standardimplementierung "Person_Adresse".
Ich will nun in der EJB Person eine Liste List<Adresse> adressen mit den vorhandenen Adressen haben. Dazu habe ich folgendes codiert:
Klasse "Person"
...
Code:
@ManyToMany
private List<Adresse> adressen;
@JoinTable(name="PERSONADR",
joinColumns=@JoinColumn(name="personID", referencedColumnName="personID"),
inverseJoinColumns=@JoinColumn(name="adressid", referencedColumnName="adressid")
)
public List<Adresse> getAdressen()
{
return adressen;
}
public void setAdressen(List<Adresse> adressen)
{
this.adressen = adressen;
}
public void addAdresse(Adresse toAdd)
{
this.getAdressen().add(toAdd);
}
public void dropAdresse(Adresse toDrop)
{
this.getAdressen().remove(toDrop);
}
Kernpunkt soll hier die @JoinTable - Annotation sein. Sie verweist nicht auf die Tabelle "Person_Adresse" als Standard (darüber würde es funktionieren), sondern auf die spezielle, schon vorhandene Verknüpfungstabelle. In joinColumns und inverseJoinColumns werden die passenden PKs und FKs angegeben.
Klasse "Adresse"
...
Code:
@ManyToMany
List<Person> personen;
Wenn ich die Applikation starte, bleibt die Liste mit den Adressen leer. Zur Kontrolle habe ich ein SQL Statement geschrieben und geprüft, ob die Tabelleninhalte richtig sind. Das war OK.
Wo ist hier mein Denkfehler?
Frage: Brauche ich eine EJB "PersonAdr"? Wenn ich über den Standard "Person_Adresse" war das nicht nötig?
Frage: Wann wird denn aus der Verbindungstabelle ausgewertet? Ich rufe derzeit aus einem Servlet getAdressen() auf. Reicht das aus?
Warum ist meine Liste List<Adresse> adressen leer?