Quelle est la différence entre l'EntityManager.find() et EntityManger.getReference()?
Est quoi la différence entre
<T> T EntityManager.find(Class<T> entityClass, Object primaryKey) and
<T> T EntityManager.getReference(Class<T> entityClass, Object primaryKey)
?
Je pense que getReference les rendements de l'entité si elle est gérée.
et de trouver des rendements de l'entité si elle est gérée d'autre exécute SQL sur la base de données pour rendre la gestion.
S'il vous plaît confirmer.
Contexte:
De webapp-je obtenir la clé primaire de l'objet à supprimer (pk de type long); de l'entité doivent être gérées de manière à supprimer.
EntityManager.remove(Object entity)
passer entité gérée à l'entitymanager méthode remove 'whats le mieux et de la bonne solution? trouver ou getReference?'
- La classe des noms d'un autre ... et l'un d'eux a quelque chose à voir avec l'alimentation des entités de l'élevage 🙂
- double possible de Lors de l'utilisation de l'EntityManager.find() vs EntityManager.getReference()
Vous devez vous connecter pour publier un commentaire.
JPA est le concept d'un EntityManager, comme vous le savez. Au cours de votre travail dans le gestionnaire d'entité certains objets sont chargés à partir de la base de données, peuvent être modifiées et ensuite vidées dans la base de données.
find()
doit retourner une initialisé à l'exemple de votre objet. Si elle n'est pas déjà chargé dans l'EntityManager, il est extrait de la base de données.getReference()
est autorisé à retourner un proxy au lieu d'un initialisé exemple, si l'entité n'a pas été chargé dans l'EntityManager avant. Dans ce proxy, seulement l'attribut de clé primaire est initialisé. Procurations peuvent être créés sans frapper, la base de données, parce que le seul attribut est initialisé déjà donné à l'getReference() fonction.Le dernier est utile lorsque vous disposez d'une entité d'Une référence à une entité B, et vous voulez mettre le b-attribut de A à B, sans avoir à les charger B à partir de la base de données.
Seulement si vous faites référence à d'autres attributs de B, le proxy sera initialisé.
EntityNotFoundException
quandgetReference()
appelé si pk_id ne correspond à aucune entité.getReference()
ne pas récupérer l'intégralité de l'objet, mais seulement un proxy et donc peut être plus efficace si vous n'avez pas accès aux membres de l'objet.Par exemple lors de la création d'un nouvel objet à insérer dans votre base de données, elle peut avoir à consulter un autre objet qui a déjà été stockées dans la base de données.
De JPA pour stocker le nouvel objet correctement que la clé primaire de l'objet est nécessaire.
En utilisant
getReference()
vous obtenez un proxy qui contient la clé primaire, et vous économisez le coût de chargement de l'objet complet.Le livre Début Java EE 6 Plate-forme avec GlassFish 3, mentionner les différences dans la page 135: "Recherche Par ID"
find()
si l'entité est trouvé, il est retourné; si elle n'est pas trouvée, une valeur null est renvoyée.getReference()
est conçu pour les situations où une entité gérée instance est nécessaire, mais pas des données, autres que potentiellement, l'entité de la clé primaire, en cours d'accès.