À partir de la veille prolongée forum:
Ce à partir du carnet de mise en veille prolongée dans l'Action. Bonne lecture de ce..
De la récupération d'objets par identifiant
La suite Hibernate extrait de code récupère un objet Utilisateur à partir de la base de données:
User user = (User) session.get(User.class, userID);
La méthode get() est spéciale, car l'identificateur qui identifie de manière unique un unique
instance d'une classe. Par conséquent, il est courant pour les applications à utiliser l'identificateur de
pratique, la poignée à un objet persistant. La récupération par l'identificateur peut utiliser le cache
lors de la récupération d'un objet, en évitant une base de données frappé si l'objet est déjà dans le cache.
Hibernate fournit également une méthode load ():
User user = (User) session.load(User.class, userID);
La méthode load() est plus; get() a été ajouté à Hibernate de l'API en raison de l'utilisateur
demande. La différence est trivial:
Si la méthode load() ne peut pas trouver l'objet dans le cache ou la base de données, une exception est
jetés. La méthode load() ne retourne null. La méthode get() renvoie
la valeur null si l'objet ne peut pas être trouvé.
La méthode load() peut retourner 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 quand il est
consulté pour la première fois; Sur le
d'autre part, get() renvoie jamais à un proxy.
Le choix entre get() et load() est simple: Si vous êtes certain de la persistance de l'
objet existe, et la non-existence, serait considéré comme exceptionnel, load() est une
bonne option. Si vous n'êtes pas certain qu'il y est une instance persistante avec le
identifiant, utilisez get() et de tester la valeur de retour pour voir si elle est null. À l'aide de la méthode load() a
une autre implication: L'application peut récupérer une référence valide (un proxy) pour un
instance persistante, sans frapper, la base de données pour récupérer la persistance de l'état. Donc
load() peut ne pas jeter une exception lorsqu'il ne trouve pas l'objet persistant
dans le cache ou la base de données, à l'exception sera levée plus tard, lorsque le proxy
est accessible.
Bien sûr, la récupération d'un objet par l'identificateur n'est pas aussi souple que l'utilisation arbitraire
les requêtes.