Не найдено ни одного объекта для исключения - PullRequest
22 голосов
/ 31 января 2011

Я выполняю следующие строки:

  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

странная ситуация. если я выполняю его только с одним экземпляром, он работает нормально, но если я делаю это параллельно с более чем одним экземпляром (mdb), то первый выполняется без каких-либо исключений, а все остальные получают эту ошибку:

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

Есть идеи, что может вызвать это? и как это работает в первый раз, но для всех остальных случаев это не так?

спасибо,

лучей. * * +1011

Ответы [ 3 ]

52 голосов
/ 31 января 2011

Сообщение об ошибке обычно говорит вам, что запрос не дал результата. И поэтому getSingleResult() терпит неудачу.

Попробуйте использовать getResultList() и проверьте результат с isEmpty(), если ожидаете пустых результатов запроса:

T03CallsLog newCall = null;
List results = q1.getResultList();
if (!results.isEmpty())
   newCall = (T03CallsLog) results.get(0);
else
   // is it a problem? -> log.
7 голосов
/ 31 января 2011

Если запрос не возвращает результата, getSingleResult() выдает NoResultException .Вы уверены, что секунды MDB получат какие-либо результаты по вашему запросу?

0 голосов
/ 15 февраля 2018

Hibernate

Более конкретным entityManager в hibernate является HibernateEntityManager.Если вместо

@PersistenceContext
public final EntityManager em = null;

использовать более конкретный

@PersistenceContext
public final HibernateEntityManager em = null;

, тогда вы можете использовать

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