Hibernate generiert SQL-Abfragen beim Zugriff auf die ID der zugehörigen Entität

8

Ich habe Hibernate Entities, die in etwa so aussehen (getters und setter sind weggelassen):

%Vor%

Wenn ich nach EntityA frage, wird es geladen, wobei die übergeordnete Zuordnung durch einen Hibernate-Proxy ersetzt wird (wie es Lazy ist). Wenn ich auf die ID des Elternteils zugreifen möchte, führe ich den folgenden Aufruf aus:

%Vor%

Wie ich weiß, sollte dieser Aufruf NICHT einen Roundtrip zur Datenbank machen, da die ID in der EntityA-Tabelle gespeichert ist und der Proxy nur diesen Wert zurückgeben sollte. In meinem Fall erzeugt dies jedoch eine SQL-Anweisung, die EntityB abruft und erst dann die ID zurückgibt.

Wie kann ich das Problem untersuchen? Was sind mögliche Ursachen für dieses falsche Verhalten?

    
Zecrates 17.09.2010, 15:43
quelle

2 Antworten

10
  

Wie ich weiß, sollte dieser Aufruf NICHT einen Roundtrip zur Datenbank machen, da die ID in der EntityA-Tabelle gespeichert ist und der Proxy nur diesen Wert zurückgeben sollte.

Verwenden Sie den Eigenschaftenzugriffstyp . Das Verhalten, auf das Sie stoßen, ist eine "Einschränkung" des Feldzugriffstyps. Hier ist, wie Emmanuel Bernard es erklärte:

  

Das ist bedauerlich, aber erwartet. Das ist eine der Einschränkungen beim Zugriff auf Feldebene.   Grundsätzlich haben wir keine Möglichkeit zu wissen, dass getId () tatsächlich nur auf das ID-Feld zugreift. Also müssen wir das gesamte Objekt laden, um sicher zu sein.

Also ändere deinen Code in:

%Vor%

Verwandte Frage

Referenzen

Pascal Thivent 17.09.2010, 21:32
quelle
0

Was Sie sagen, macht Sinn - dass es keinen DB-Treffer geben würde, da EntityA die Eltern-ID enthält. Ich bin nur nicht sicher, ob der getParent () -Aufruf tatsächlich das EntityB-Objekt lädt, unabhängig davon, ob Sie nur an der ID interessiert sind. Sie könnten versuchen, die Children-Sammlung (und alle anderen Felder) als Lazy zu markieren, wenn Sie den DB-Treffer speichern möchten.

%Vor%     
taj 17.09.2010 21:46
quelle