Объект не найден для запроса Исключение
Я выполняю следующие строки:
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
любая идея, что может вызвать это? и как это работает в первый раз, но для всех остальных экземпляров это не так?
благодаря,
лучей.
Ответы
Ответ 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;