webentwicklung-frage-antwort-db.com.de

Es wurde keine Entität für die Abfrage Ausnahme gefunden

Ich führe folgende Zeilen aus:

  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

seltsame Situation ... Wenn ich es nur mit einer Instanz ausführe, funktioniert es gut, aber wenn ich es parallel mit mehr als einer Instanz (mdb) mache, wird die erste ohne Ausnahmen ausgeführt, und alle anderen erhalten diesen Fehler

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

eine Idee, was könnte es verursachen? und wie es beim ersten Mal funktioniert, aber bei allen anderen Instanzen nicht?

vielen Dank,

strahl.

20
rayman

Die Fehlermeldung zeigt normalerweise an, dass die Abfrage kein Ergebnis zurückgegeben hat. Und so schlägt getSingleResult() fehl.

Erwägen Sie die Verwendung von getResultList() und testen Sie das Ergebnis mit isEmpty(), wenn Sie leere Abfrageergebnisse erwarten:

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

Wenn eine Abfrage kein Ergebnis zurückgibt, wird eine NoResultException von getSingleResult() ausgelöst. Sind Sie sicher, dass die Sekunden-MDB durch Ihre Abfrage Ergebnisse liefert? 

7

Hibernate

Der spezifischere entityManager im Ruhezustand ist der HibernateEntityManager. Wenn du statt 

@PersistenceContext
public final EntityManager em = null;

Verwenden Sie das spezifischere 

@PersistenceContext
public final HibernateEntityManager em = null;

Dann könnten Sie die verwenden 

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