查询时未找到实体异常。

26

我正在执行以下代码:

  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

有什么想法会导致这种情况?为什么第一次能运行,但其余所有实例都不能?

谢谢,

雷。

3个回答

63
通常情况下,错误信息会告诉你查询未返回结果。因此getSingleResult()失败了。
如果您预期查询结果为空,请考虑使用getResultList()并使用isEmpty()测试结果。
T03CallsLog newCall = null;
List results = q1.getResultList();
if (!results.isEmpty())
   newCall = (T03CallsLog) results.get(0);
else
   // is it a problem? -> log.

8
如果查询没有返回结果,则getSingleResult()将抛出一个NoResultException异常。你确定第二个MDB将通过你的查询得到任何结果吗?

-1

Hibernate

Hibernate中更具体的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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接