G
Gelöschtes Mitglied 5909
Gast
Hallo liebe JPA Freunde,
habe ein kleines Problem:
Es gibt in der Datenbank einen Master und ggf. zum gleichen Master mehrere Detail Sätze (Zeitabhängig)
Master 1 : n Detail
Beide haben eine eigene Entity. Im Detail Satz existiert eine ParentId, sodass Zeitabhängig ein Baum entsteht.
Diese Beziehung habe ich in einer Node Entity gekapselt, die auf beide Tabellen zugreift (@SecondaryTable)
Die Node Entity hat vereinfacht (ID, PARENT_ID, TIME) als Columns
Die Query die ich beim Abfragen verwende ist eine Native Oracle Query um den Baum zusammenzubauen (mit connect by)
Nun zum eigentlichen Problem:
Wenn ich den Detail Satz ändere und damit quasi eine Node im Baum umhänge,
dannach den Baum refreshe, dann ist der Baum nicht richtig(alter Stand). Die Query funktioniert einwandfrei.
Meine erste vermutung: Der Cache
doch:
- Ich habe sowohl den shared cache, also auch den normalen Cache auf None gestellt, Cache size null
(An Zentraler Stelle: Eigene EntityManagerFactory)
- Ich musste den Cache sowieso deaktivieren, da ich mehrere JVMs am laufen habe
Vorläufige Lösung:
- mache ich vor dem query ein EntityManager#clear funktioniert es. Finde ich aber nicht schön
Vermutung:
JPA Identifiziert die Objekte anhand des Primärschlüssels
MatserPK: ID
DetailPK: ID, zwei weitere Spalten (keine davon in der NodeEntity)
JoinColumn ist natürlich die Id
Der NodeEntity habe ich NUR ID als PK gegeben und mit @PrimaryKeyJoinColumn gejoined.
Da sich die ID des Mastersatzes aber nicht ändert, sondern die ParentId nimmt dann JPA an dass es die gleichen Objekte sind???
- wie kann das sein???
- Kann ich mit irgendeiner Annotation eine ID "simulieren"?? (Für den Cache ?) Ist das @MapsKey??
- Liegt das Problem daran, dass ich zwei Entities habe die auf die gleichen Tabelle(n) gehen?
- Wenn ich zwei Clients und zwei server verwende stimmen die master und details sätze (Cache sollte erfolgreich deaktiviert sein)
- Wie kann das überhaupt sein, da ich den Cache ja ganz deaktiviert habe, er sollte doch immer auf die DB gehn? Ist auch so erwünscht
EclipseLink 2.0.1
Dnake im vorraus
habe ein kleines Problem:
Es gibt in der Datenbank einen Master und ggf. zum gleichen Master mehrere Detail Sätze (Zeitabhängig)
Master 1 : n Detail
Beide haben eine eigene Entity. Im Detail Satz existiert eine ParentId, sodass Zeitabhängig ein Baum entsteht.
Diese Beziehung habe ich in einer Node Entity gekapselt, die auf beide Tabellen zugreift (@SecondaryTable)
Die Node Entity hat vereinfacht (ID, PARENT_ID, TIME) als Columns
Die Query die ich beim Abfragen verwende ist eine Native Oracle Query um den Baum zusammenzubauen (mit connect by)
Nun zum eigentlichen Problem:
Wenn ich den Detail Satz ändere und damit quasi eine Node im Baum umhänge,
dannach den Baum refreshe, dann ist der Baum nicht richtig(alter Stand). Die Query funktioniert einwandfrei.
Meine erste vermutung: Der Cache
doch:
- Ich habe sowohl den shared cache, also auch den normalen Cache auf None gestellt, Cache size null
(An Zentraler Stelle: Eigene EntityManagerFactory)
- Ich musste den Cache sowieso deaktivieren, da ich mehrere JVMs am laufen habe
Vorläufige Lösung:
- mache ich vor dem query ein EntityManager#clear funktioniert es. Finde ich aber nicht schön
Vermutung:
JPA Identifiziert die Objekte anhand des Primärschlüssels
MatserPK: ID
DetailPK: ID, zwei weitere Spalten (keine davon in der NodeEntity)
JoinColumn ist natürlich die Id
Der NodeEntity habe ich NUR ID als PK gegeben und mit @PrimaryKeyJoinColumn gejoined.
Da sich die ID des Mastersatzes aber nicht ändert, sondern die ParentId nimmt dann JPA an dass es die gleichen Objekte sind???
- wie kann das sein???
- Kann ich mit irgendeiner Annotation eine ID "simulieren"?? (Für den Cache ?) Ist das @MapsKey??
- Liegt das Problem daran, dass ich zwei Entities habe die auf die gleichen Tabelle(n) gehen?
- Wenn ich zwei Clients und zwei server verwende stimmen die master und details sätze (Cache sollte erfolgreich deaktiviert sein)
- Wie kann das überhaupt sein, da ich den Cache ja ganz deaktiviert habe, er sollte doch immer auf die DB gehn? Ist auch so erwünscht
EclipseLink 2.0.1
Dnake im vorraus