未找到查询异常的实体
Posted
技术标签:
【中文标题】未找到查询异常的实体【英文标题】:No entity found for query Exception 【发布时间】:2011-06-18 10:32:45 【问题描述】:我正在执行以下几行:
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()
会抛出一个NoResultException。您确定秒 MDB 会通过您的查询获得任何结果吗?
【讨论】:
【参考方案2】:错误消息通常会告诉您,查询未返回任何结果。所以getSingleResult()
失败了。
如果您期望空查询结果,请考虑使用getResultList()
并使用isEmpty()
测试结果:
T03CallsLog newCall = null;
List results = q1.getResultList();
if (!results.isEmpty())
newCall = (T03CallsLog) results.get(0);
else
// is it a problem? -> log.
【讨论】:
【参考方案3】:休眠
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;
【讨论】:
以上是关于未找到查询异常的实体的主要内容,如果未能解决你的问题,请参考以下文章