未找到查询异常的实体

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;

【讨论】:

以上是关于未找到查询异常的实体的主要内容,如果未能解决你的问题,请参考以下文章

休眠:- 未找到本机查询异常

Hibernate - 自定义查询未通过 ManyToOne 单向关系的 child 参数找到实体

休眠查询异常:在 JPA 查询期间无法解析实体属性

Hibernate异常之命名查询节点未找到

我在本机查询中没有选择的列出现异常

Android - 用于查找已删除标志的 SQLite 查询 - 未找到异常 DELETED 列