Pourquoi dans l'EntityManager requêtes jeter NoResultException mais trouver ne l'est pas?
Quelqu'un peut-il me dire les raisons intrinsèques pourquoi, dans la JPA 1.0 EntityManager lors de la récupération d'un Objet par trouver, vous avez à traiter avec la valeur null si pas trouvé, mais lors de l'utilisation de l'interface de Requête via createQuery getResultList jette un NoResultException lorsqu'il n'est pas trouvé.
Peut-être que je manque quelque chose, mais je me sens très incohérent pour une Langue, et en fait j'ai eu à faire beaucoup de redesing à cause de l'évolution à partir d'un simple outil de recherche pour plus de précision, requête à l'aide de l'interface de requête.
Merci les gars.
Je pense que vous avez tort. queryForObject() lève une exception. queryForList() retourne une liste vide.
Vous missunderstand quelque chose. Je suis en train de parler javax.la persistance.EntityManager et javax.la persistance.De la requête. Vérifiez ces interfaces, vous comprendrez.
Vous missunderstand quelque chose. Je suis en train de parler javax.la persistance.EntityManager et javax.la persistance.De la requête. Vérifiez ces interfaces, vous comprendrez.
OriginalL'auteur | 2009-10-16
Vous devez vous connecter pour publier un commentaire.
Les requêtes peuvent être utilisés pour récupérer un peu de tout, notamment la valeur d'une seule colonne dans une ligne unique.
Si
getSingleResult()
serait de retour null, vous ne pourriez pas dire si la requête ne correspond à aucun ligne ou si la requête correspondant à une ligne mais la colonne sélectionnée contient une valeur null comme valeur.OriginalL'auteur Thorsten
Lorsque vous faites une recherche, jpa utilise la clé primaire de localiser l'objet d'entité, souvent à l'aide du cache de second niveau et il est généralement beaucoup plus rapide que createQuery et getSingleResult.
Vous obtenez soit null ou de l'Objet de la trouver. Lorsque vous faites un createQuery et de l'instance d'objet de la Requête est créée. Si vous faites un getResultList il ne sera pas jeter un NoResultException, uniquement si vous effectuez une getSingleResult il va jeter cette exception. Si vous faites un getResultList et aucun n'est trouvé, la valeur null sera retourné.
getResultList() au moins w/Eclipselink (qui est le JPA2 implémentation de référence) retourne une Liste vide pas un NULL.
Oui pour JPA2, mais la question à l'époque n'était pas pour JPA2, mais JPA
OriginalL'auteur Shervin Asgari
Aussi, NoResultException marquera la transaction rolledback dans weblogic 10.3.2.
Voir cet article: NoResultException marques de l'annulation de la transaction
OriginalL'auteur Mike
Je pense qu'il élimine ce null check :
Par l'introduction d'une RuntimeException (NoResultException) , les programmeurs peuvent en toute sécurité en fonte q.getSingleResult() pour MyObj , et de laisser à l'exception de l'appelant.
À q.getResultList() , il retournera toujours une liste , null-vérification n'est pas nécessaire.
Mais je me sens encore cette non-intuitive.
null
avant la coulée, de sorte que ce serait exactement la même quereturn (MyObj) q.getSingleResult()
Didier est à droite. Vous pouvez lancer la valeur null pour n'importe quel type.
désolé , mon mauvais 🙁
OriginalL'auteur smallufo