Aus dem Hibernate-Forum :
Dies aus dem Buch Hibernate in Action. Gut, dass man das gelesen hat ..
Abrufen von Objekten nach Kennung Mit dem folgenden Code-Snippet im Ruhezustand wird ein Benutzerobjekt aus der Datenbank abgerufen:
User user = (User) session.get(User.class, userID);
Die Methode get () ist etwas Besonderes, da der Bezeichner eine einzelne Instanz einer Klasse eindeutig identifiziert. Daher verwenden Anwendungen den Bezeichner häufig als praktisches Handle für ein beständiges Objekt. Das Abrufen nach Kennung kann den Cache beim Abrufen eines Objekts verwenden und einen Datenbanktreffer vermeiden, wenn das Objekt bereits zwischengespeichert ist. Hibernate bietet auch eine load () -Methode:
User user = (User) session.load(User.class, userID);
Die load () -Methode ist älter; get () wurde aufgrund einer Benutzeranforderung zur Hibernate-API hinzugefügt. Der Unterschied ist trivial:
Wenn load () das Objekt nicht im Cache oder in der Datenbank finden kann, wird eine Ausnahme ausgelöst. Die load () -Methode gibt niemals null zurück. Die Methode get () gibt null zurück, wenn das Objekt nicht gefunden werden kann.
Die load () -Methode gibt möglicherweise einen Proxy anstelle einer echten persistenten Instanz zurück. Ein Proxy ist ein Platzhalter, der beim erstmaligen Zugriff das Laden des realen Objekts auslöst. Andererseits gibt get () niemals einen Proxy zurück. Die Wahl zwischen get () und load () ist einfach: Wenn Sie sicher sind, dass das persistente Objekt vorhanden ist und keine Existenz als außergewöhnlich angesehen wird, ist load () eine gute Option. Wenn Sie nicht sicher sind, ob es eine persistente Instanz mit dem angegebenen Bezeichner gibt, verwenden Sie get () und testen Sie den Rückgabewert, um festzustellen, ob er null ist. Die Verwendung von load () hat eine weitere Auswirkung: Die Anwendung kann einen gültigen Verweis (einen Proxy) auf eine persistente Instanz abrufen, ohne die Datenbank zu treffen, um ihren persistenten Status abzurufen. Load () löst daher möglicherweise keine Ausnahme aus, wenn das persistente Objekt nicht im Cache oder in der Datenbank gefunden wird. Die Ausnahme wird später ausgelöst, wenn auf den Proxy zugegriffen wird. Das Abrufen eines Objekts anhand eines Bezeichners ist natürlich nicht so flexibel wie die Verwendung beliebiger Abfragen.