Подтвердить что ты не робот

Объект не найден для запроса Исключение

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

  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

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

благодаря,

лучей.

4b9b3361

Ответ 1

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

Рассмотрите возможность использования getResultList() и проверьте результат с помощью isEmpty(), если вы ожидаете результаты пустого запроса:

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

Ответ 2

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

Ответ 3

зимовать

Более конкретным entityManager в спящем режиме является 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;