Subtilité HibernateTemplate : différence entre get et load

Dans le cadre de la recherche d'un objet en base de données par son identifiant, Hibernate fournit plusieurs méthodes via la classe HibernateTemplate. Parmi elles, on trouve la méthode load et la méthode get. Mais attention, malgré les apparences, ces deux méthodes de récupération d'objet sont différentes. Voici leur javadoc respective :

Object get(Class entityClass, Serializable id) throws DataAccessException

Return the persistent instance of the given entity class with the given identifier, or null if not found.

Object load(Class entityClass, Serializable id) throws DataAccessException

Return the persistent instance of the given entity class with the given identifier, throwing an exception if not found.

La principale différence entre ces deux méthodes est ce qu'elles renvoient dans le cas où l'objet correspondant à la classe et à l'identifiant donnés en paramètres n'existe pas : la méthode get renvoie null si elle ne trouve pas de résultat, alors que la méthode load renvoie un objet non null qui est un proxy. Ce proxy n'est d'ailleurs pas exploitable en mode debug.

Un commentaire

  1. Bonjour,
    J’arpente depuis qq heures votre blog.
    Merci pour les nombreux rappels et découvertes que j’ai pu faire.

    Pouvez-vous préciser ce que vous entendez par « proxy » dans le retour de la méthode load() ? (alors que la javadoc parle d’une exception).

    Merci par avance

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.