Hallo,
ich habe ein Problem mit JPA, genauer: Die Annotation @JoinColumns ....
Es geht darum, dass ich eine Java-GUI zu einer bestehenden Datenbank entwickle. Diese DB soll im Idealfall nicht verändert werden.
Bei meinem Problem geht es um zwei Tabellen: TABELLE1 und TABELLE2. Beide haben ein Feld ID, das der Primärschlüssel ist.
Nun möchte ich eine Verbindung zwischen diesen beiden Tabellen herstellen, jedoch nicht über den Primärschlüssel, sondern über zwei andere Felder, die es in beiden Tabellen gibt: FELD_A und FELD_B ...
Also schreibe ich in Tabelle1.java:
Das Programm wirft jedoch beim Start folgende Exception
Wie gehe ich mit dieser Fehlermeldung um?
Zuerst dachte ich, dass der "referencedColumnName" immer ein Primärschlüssel-Feld von TABELLE2 sein muss. Dem ist aber nicht so. An einer anderen Stelle in meinem Programm habe ich auch schon eine @OneToOne-Verknüpfung gemacht, da ist das "referencedColumName"-Feld auch kein Primärschlüssel-Feld. Warum geht es also hier nicht?
Als Test habe ich den Primärschlüssel in TABELLE2 vom Feld ID auf die Felder FELD_A und FELD_B umgestellt und dies auch in meiner Entity-Class Tabelle2 umgestellt. Dann funktioniert die Verknüpfung. Allerdings ist doch ID eigentlich mein Primärschlüssel und diese Umstellung hat an anderen Stellen in meinem Programm wieder Konsequenzen....
Danke für die Hilfe!
Stefan.
ich habe ein Problem mit JPA, genauer: Die Annotation @JoinColumns ....
Es geht darum, dass ich eine Java-GUI zu einer bestehenden Datenbank entwickle. Diese DB soll im Idealfall nicht verändert werden.
Bei meinem Problem geht es um zwei Tabellen: TABELLE1 und TABELLE2. Beide haben ein Feld ID, das der Primärschlüssel ist.
Nun möchte ich eine Verbindung zwischen diesen beiden Tabellen herstellen, jedoch nicht über den Primärschlüssel, sondern über zwei andere Felder, die es in beiden Tabellen gibt: FELD_A und FELD_B ...
Also schreibe ich in Tabelle1.java:
Code:
@OneToOne
@JoinColumns({
@JoinColumn(name="FELD_A", referencedColumnName="FELD_A"),
@JoinColumn(name="FELD_B", referencedColumnName="FELD_B")
})
private Tabelle2 tabelle2;
Das Programm wirft jedoch beim Start folgende Exception
Exception Description: A @JoinColumns was specified on the annotated element [private Tabelle2 tabelle2] from the entity class [Tabelle1]. When the source entity class uses a single primary key, only a single (or zero) @JoinColumn should be specified.
Wie gehe ich mit dieser Fehlermeldung um?
Zuerst dachte ich, dass der "referencedColumnName" immer ein Primärschlüssel-Feld von TABELLE2 sein muss. Dem ist aber nicht so. An einer anderen Stelle in meinem Programm habe ich auch schon eine @OneToOne-Verknüpfung gemacht, da ist das "referencedColumName"-Feld auch kein Primärschlüssel-Feld. Warum geht es also hier nicht?
Als Test habe ich den Primärschlüssel in TABELLE2 vom Feld ID auf die Felder FELD_A und FELD_B umgestellt und dies auch in meiner Entity-Class Tabelle2 umgestellt. Dann funktioniert die Verknüpfung. Allerdings ist doch ID eigentlich mein Primärschlüssel und diese Umstellung hat an anderen Stellen in meinem Programm wieder Konsequenzen....
Danke für die Hilfe!
Stefan.