我正在使用eclipse indigo,并且遇到了"JPA验证问题“。
我的命名查询是:
from Person p where p.name = :name
并且有这样的错误:
The query does not start with a valid identifier, has to be either SELECT, UPDATE or DELETE FROM.
但它是一个有效的JPQL查询。有人知道怎样才能消除这个错误吗?
如果我将查询更改为
select p from Person p where p.name = :name
没有更多的错误,但我不想更改所有的查询。
谢谢
mp5
发布于 2012-06-27 13:08:22
在我看来,任何形式的查询都是这样的:
from Person p where p.name = :name
实际上不是有效的JPQL。根据位于以下位置的语言参考:
http://docs.oracle.com/javaee/5/tutorial/doc/bnbuf.html
每条语句都需要在FROM
部分之前有SELECT
、UPDATE
或DELETE
语句。
下面是更多的例子:
http://en.wikipedia.org/wiki/Java_Persistence_Query_Language
不幸的是,看起来您需要更新所有查询以使其符合此格式。
发布于 2012-07-05 14:55:12
如果您不关心可移植性,可以关闭Indigo发行版中添加到Dali的JPQL验证。如果你有一个选择了Hibernate平台的JPA项目,你仍然会得到Hibernate工具对JPQL/HQL的验证。
转到工作区首选项'Java Persistence‘->JPA->Errors/Warning’,将'Queries and generators‘下的'Invalid or Invalid queries’更改为'Ignore‘。如果您希望Hibernate工具为Hibernate平台扩展Dali JPQL验证,或者只是在默认情况下将其关闭,那么您可以针对Hibernate工具输入一个bug。
发布于 2012-06-27 13:06:14
实际上,这不是一个有效的JPQL查询。JPQL以"SELECT“、"UPDATE”或"DELETE“开头。
显然,它可以在Hibernate (即HQL)中工作,但该查询不是标准的,也不是可移植的。因此,如果您不想更改您的查询,那么您将不使用JPA,并且您的应用程序是不可移植的。
JPA规范将证实这一点。
https://stackoverflow.com/questions/11226491
复制