我正在执行以下行:
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
任何想法可能导致什么?以及它是如何在第一次工作,但对于所有其他实例它不是吗?
感谢,
射线。
答案 0 :(得分:51)
错误消息通常告诉您,查询未返回任何结果。所以getSingleResult()
失败了。
如果您希望查询空查询结果,请考虑使用getResultList()
并使用isEmpty()
测试结果:
T03CallsLog newCall = null;
List results = q1.getResultList();
if (!results.isEmpty())
newCall = (T03CallsLog) results.get(0);
else
// is it a problem? -> log.
答案 1 :(得分:7)
如果查询未返回任何结果,则getSingleResult()
会抛出NoResultException。您确定,秒MDB会通过您的查询获得任何结果吗?
答案 2 :(得分:0)
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;