web-dev-qa-db-fra.com

Aucune entité trouvée pour la requête Exception

J'exécute les lignes suivantes:

  String queString = "some query string"
  Query q1 = em.createNativeQuery(queString, T03CallsLog.class);
  T03CallsLog newCall;
  newCall = (T03CallsLog) q1.getSingleResult(); //this line cause the exception after         the first time

situation bizarre . si je l'exécute avec une seule instance cela fonctionne bien, mais si je le fais en parallèle avec plus d'une instance (mdb), la première est exécutée sans aucune exception, et tous les autres obtiennent cette erreur:

10:04:50,750 ERROR [log] ECMSDispatcherMdb.onMessage, error: No entity found for query

aucune idée de ce qui pourrait le causer? et comment cela fonctionne-t-il la première fois, mais pour le reste des cas, ce n'est pas le cas?

merci,

rayon.

20
rayman

Le message d'erreur vous indique généralement que la requête n'a renvoyé aucun résultat. Et si getSingleResult() échoue.

Pensez à utiliser getResultList() et testez le résultat avec isEmpty() si vous attendez des résultats de requête vides:

T03CallsLog newCall = null;
List results = q1.getResultList();
if (!results.isEmpty())
   newCall = (T03CallsLog) results.get(0);
else
   // is it a problem? -> log.
49
Andreas_D

Si une requête ne donne aucun résultat, une NoResultException est levée par getSingleResult(). Etes-vous sûr, les secondes MDB, obtiendront des résultats par votre requête? 

7
Christian Kuetbach

Hibernate

Le module entityManager le plus spécifique dans hibernate est le gestionnaire HibernateEntity. Si vous au lieu de 

@PersistenceContext
public final EntityManager em = null;

Utilisez le plus spécifique 

@PersistenceContext
public final HibernateEntityManager em = null;

Ensuite, vous pouvez utiliser le 

String queString = "some query string"
Iterator<T03CallsLog> q1 = em.createNativeQuery(queString, T03CallsLog.class).iterate();
T03CallsLog newCall = q1.hasNext() ? q1.next() : null;
0
Peter Rader