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.
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.
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?
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;