Hibernate 3.6 - Sitzung.get() vs-Sitzung.load()

Ich versuche zu verstehen, was der Unterschied ist im zurückgegebenen Objekt und Verhalten von Hibernate 3.6 session.get() und session.load().

Aus der javadoc:

get():

Rückkehr der persistenten Instanz des angegebenen entity-Klasse mit der
gegebenen id, oder null, falls es keine solche persistente Instanz. (Wenn
die Instanz ist bereits im Zusammenhang mit der Sitzung zurück, dass
Instanz. Diese Methode kehrt nie zurück ein nicht initialisierter Instanz.)

load():

Rückkehr der persistenten Instanz des angegebenen entity-Klasse mit der
angegebenen Identifikator, unter der Annahme, dass die Instanz vorhanden ist. Diese Methode könnte
Rückkehr einer Proxy-Instanz initialisiert on-demand, wenn eine
nicht-id-Methode zugegriffen wird.

Ich habe drei Fragen:

  1. In der javadoc nicht sagen, wenn load() zurückgeben könnte ein proxy - gibt es eine Möglichkeit, es zu wissen im Voraus?

  2. Wenn load() gibt einen proxy - das heißt load() nicht auf die Datenbank zugreifen, bin ich richtig? Wenn ich dann was zur Verfügung gestellt load() mit einem Bezeichner, der nicht in der Datenbank vorhanden sind? Ich will nun in der Sitzung einen proxy mit einer ungültigen ID (ohne eine Ausnahme). Ich will jetzt lassen anderen persistenten Instanz zeigen auf, dass der proxy - ist es, zur Arbeit zu gehen? Für dieses Szenario brauche ich nicht zum initialisieren der proxy, ich brauche nur seine id (die ich habe, obwohl seine ungültig, da es nicht in der Datenbank). Also ich denke, ich Frage, ob meine Beschreibung richtig ist, und muss ich immer den check-out nach load() das zurückgegebene Objekt mit isInitialized() um sicherzustellen, dass es stellt eine gültige Einheit (oder zumindest eine gültige proxy), d.h. mit einer gültigen ID.

  3. Auch, was passiert, wenn load() gibt einen proxy - also der proxy ist die Instanz, die bereits im Zusammenhang mit der Sitzung. Dann nach der Beschreibung des get(): "Wenn die Instanz bereits im Zusammenhang mit der Sitzung zurück, dass die Instanz." - also nicht get() Gegenzug den proxy? Da nach der Beschreibung des get(): "Diese Methode kehrt nie zurück ein nicht initialisierter Instanz".

Dank!

UPDATE

Sind die folgenden korrekt?

(A) ich denke, dass beide load() und get() wird zunächst versuchen, überprüfen Sie die session-cache, bevor Sie gehen, um die DB - so wäre es nicht Recht zu sagen, dass einer von Ihnen immer trifft der DB, oder gibt immer einen proxy.

(B) Eine initialisierte proxy ist nicht das gleiche wie die ursprüngliche Instanz, wie Sie hier Lesen können: http://blog.xebia.com/2008/03/08/advanced-hibernate-proxy-pitfalls/

InformationsquelleAutor rapt | 2011-11-08
Schreibe einen Kommentar