Avant de poster cette question, j'ai déjà regardé this, mais je n'ai pas pu obtenir ce que je cherchais.javax.persistence.NoResultException: Aucune entité trouvée pour la requête
Je sais que pour la requête que j'ai écrite, il peut exister seulement une ligne ou pas du tout. Donc, il n'y a pas de raison pour moi d'utiliser getResultList()
.
Voici mon code:
String hql="from DrawUnusedBalance where unusedBalanceDate= :today";
Query query=em.createQuery(hql);
query.setParameter("today",new LocalDate());
DrawUnusedBalance drawUnusedBalance=
(DrawUnusedBalance)query.getSingleResult();// we can have only a
// single datum per day
//`System.out.println(drawUnusedBalance.toString());`
Le problème est, s'il n'y a pas de ligne, il jette une exception, et sinon il fonctionne très bien. Je connais le problème mais je cherche aussi la meilleure solution. Ce que je voulais, c'est que s'il n'y avait pas de ligne dans la DB je voulais obtenir un objet nul (au lieu d'avoir une exception) donc j'insérerais une nouvelle donnée, si elle n'est pas nulle, je veux juste mettre à jour il.
Il y a une façon de gérer cela, ce qui, je crois, n'est pas la bonne façon de le faire. C'est: Je vais avoir un bloc try-catch et s'il lance une exception, je peux écrire pour insérer de nouvelles données dans le DB sur le bloc catch. Mais je crois qu'il y aura un meilleur moyen.
Merci ManuPK ... Mais je dois encore écrire du code qui crée un objet et persiste faire un DB .. dans le Catch bloc .... et je pensais que ce ne serait pas un bon moyen de conserver les données d'un bloc catch ... Bien que tnx pour votre réponse. – WowBow
Je pense qu'il n'y a rien de mal à attraper une ** exception vérifiée ** et à prendre un chemin alternatif. C'est pourquoi l'APP vous donne l'option sur la façon dont vous voulez le gérer. En fait, la méthode que vous recherchez est disponible dans [hibernate] (http://docs.jboss.org/hibernate/core/3.2/api/org/hibernate/Query.html#uniqueResult()) qui n'est pas disponible avec JPA . – ManuPK
@ user1017111 J'ai eu votre problème en écrivant du code dans le ** catch **. J'ai légèrement mis à jour la réponse pour rendre le code lisible. – ManuPK