Depuis le forum Hibernate :
Ceci du livre Hibernate in Action. Bonne lecture.
Récupération d'objets par identifiant L'extrait de code Hibernate suivant récupère un objet User de la base de données:
User user = (User) session.get(User.class, userID);
La méthode get () est spéciale car l'identifiant identifie de manière unique une seule instance d'une classe. Par conséquent, il est courant pour les applications d'utiliser l'identifiant comme un descripteur pratique d'un objet persistant. La récupération par identificateur peut utiliser le cache lors de la récupération d'un objet, évitant un hit de base de données si l'objet est déjà mis en cache. Hibernate fournit également une méthode load ():
User user = (User) session.load(User.class, userID);
La méthode load () est plus ancienne; get () a été ajouté à l'API d'Hibernate en raison de la demande de l'utilisateur. La différence est triviale:
Si load () ne trouve pas l'objet dans le cache ou la base de données, une exception est levée. La méthode load () ne renvoie jamais null. La méthode get () retourne null si l'objet est introuvable.
La méthode load () peut renvoyer un proxy au lieu d'une véritable instance persistante. Un proxy est un espace réservé qui déclenche le chargement de l'objet réel lorsqu'il y accède pour la première fois; D'un autre côté, get () ne renvoie jamais de proxy. Le choix entre get () et load () est facile: si vous êtes certain que l'objet persistant existe et que la non-existence serait considérée comme exceptionnelle, load () est une bonne option. Si vous n'êtes pas certain qu'il existe une instance persistante avec l'identifiant donné, utilisez get () et testez la valeur de retour pour voir si elle est nulle. L'utilisation de load () a une autre implication: l'application peut récupérer une référence valide (un proxy) vers une instance persistante sans toucher la base de données pour récupérer son état persistant. Ainsi load () peut ne pas lancer d'exception lorsqu'il ne trouve pas l'objet persistant dans le cache ou la base de données; l'exception serait levée plus tard, lors de l'accès au proxy. Bien sûr, la récupération d'un objet par identifiant n'est pas aussi flexible que l'utilisation de requêtes arbitraires.