JPQL createQuery 抛出非法ArgumentException

Posted

技术标签:

【中文标题】JPQL createQuery 抛出非法ArgumentException【英文标题】:JPQL createQuery throws illegalArgumentException 【发布时间】:2010-10-17 07:10:53 【问题描述】:

以下简单代码抛出异常:

entityManager.createQuery("SELECT c FROM Customer c");

但是如果我写了

entityManager.createNativeQuery("SELECT c.* FROM Customer c", Customer.class) 

然后它可以正常工作。可能有什么问题?我使用带有 Toplink-essentials 的 GlassFish v2.1。

【问题讨论】:

能否添加异常的堆栈跟踪? 【参考方案1】:

只要您将类 Customer 定义为实体,JPQL 查询“SELECT c FROM Customer c”就有效。该方法仅在查询由于某种原因“无效”时抛出异常,如果出现问题,任何体面的 JPA 实现都应该在异常消息中提供更多信息

--安迪 (DataNucleus)

【讨论】:

谢谢安迪。我有带有 @Entity 注释的 Customer 类。正如我所说,本机查询返回客户对象没有任何问题,但普通的 jpa 查询不起作用。 所以我建议您要么使用 TopLink 日志和邮件列表,要么尝试其他确实支持此类语法的 JPA 实现(例如 DataNucleus)。 好吧,安迪你是对的。我使用表名而不是类名。实际上我的查询是“SELECT c FROM customer_info c”。

以上是关于JPQL createQuery 抛出非法ArgumentException的主要内容,如果未能解决你的问题,请参考以下文章

JPQL 语句返回布尔值

OpenJPA:JPQL 与本机查询

JPQL,如何不选择某些东西

在 JPQL 中将整数转换为字符串

如何在 JPQL 中使用 GROUP BY 和 UNION

有没有办法在 JPQL 中检查 null ZonedDateTime?