J'ai le code ci-dessous dans mon dao
String sql = "SELECT COUNT(*) FROM CustomerData WHERE custId = :custId AND deptId = :deptId";
Query query = session.createQuery(sql);
query.setParameter("custId", custId);
query.setParameter("deptId", deptId);
long count =(long) query.uniqueResult(); //line 1
Hibernate jette en dessous de l'exception à la ligne 1
org.hibernate.NonUniqueResultException: query did not return a unique result:
Je ne suis pas sûr de ce qui se passe, car count (*) ne renverra toujours qu'une seule ligne. De plus, lorsque je lance cette requête directement sur la base de données, le résultat est égal à 1. Alors quel est le problème?
Il semble que votre requête renvoie plusieurs résultats. Vérifiez la base de données. Dans la documentation de query.uniqueResult()
, vous pouvez lire:
Lance: org.hibernate.NonUniqueResultException - s'il y a plus qu'un résultat correspondant
Si vous voulez éviter cette erreur tout en utilisant une requête de résultat unique, vous pouvez utiliser ce type de solution de contournement query.setMaxResults(1).uniqueResult();
Je ne pense pas que d'autres réponses aient expliqué la partie clé: pourquoi "COUNT (*)" renvoie plus d'un résultat?
Je viens de rencontrer le même problème aujourd'hui, et ce que j'ai découvert, c'est que si vous avez une autre classe étendant la classe mappée cible (ici, "CustomerData"), Hibernate fera cette magie.
J'espère que cela fera gagner un peu de temps aux autres malheureux.
Cela signifie que la requête que vous avez écrite retourne plus d'un élément (résultat) alors que votre code attend un seul résultat.