it-swarm.com.ru

Не найдено ни одного объекта для исключения

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

  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

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

спасибо,

лучей.

20
rayman

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

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

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

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

7
Christian Kuetbach

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;
0
Peter Rader