web-dev-qa-db-fra.com

org.hibernate.NonUniqueResultException: la requête n'a pas renvoyé un résultat unique: 2?

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?

19
user3198603

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(); 

16
GROX13

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.

1
Ian Wang

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.

0
rex roy