dimanche 8 mars 2015

JPA JOIN on JOIN

Ich nutze OpenJPA von Apache für meine Webseite und würde gerne in meiner NamedQuery auf einer gejointen Tabelle ein FETCH JOIN anwenden.



Ich habe drei Tabellen (Auto, Fahrer, Wohnsitz). Ein Auto hat einen Fahrer (n:1) und ein Fahrer kann mehrere Wohnsitze haben (1:n). Jetzt möchte ich zu allen Autos den Fahrer und die Wohnsitze anzeigen lassen, dazu habe ich folgendes Statement:




Code:



SELECT a FROM Auto a JOIN FETCH a.fahrer JOIN FETCH a.fahrer.wohnsitze


Beim ersten Aufruf der Webseite wird jetzt alles korrekt angezeigt. Es wird ein SELECT auf die Tabelle Auto mit dem Join auf Fahrer abgesetzt und zusätzlich zu jedem Fahrer ein SELECT auf die Tabelle Wohnsitze.



Wenn ich ein Reload der Seite mache, dann klappt das aber nicht mehr, dann wird nur das das SELECT auf Auto mit dem Join auf Fahrer abgesetzt. Das SELECT auf die Tabelle Wohnsitze fehlt. Warum klappt es bei ersten Mal und danach nicht mehr?



Ich habe alle Joins im Model als FetchType.LAZY definiert. Ich möchte über die NamedQueries mir die Tabellen dazujoinen, die ich benötige. Mit FetchType.EAGER habe ich das Problem von oben natürlich nicht.



Aber wenn beim ersten Aufruf alles wie gewünscht funktioniert, frage ich mich, warum nicht beim zweiten Mal?





JPA JOIN on JOIN

0 commentaires:

Enregistrer un commentaire