Eclipse Indigo - JPA验证问题

时间:2012-06-27 12:42:53

标签: java eclipse validation jpa jpql

我正在使用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

4 个答案:

答案 0 :(得分:8)

如果您不关心可移植性,可以关闭在Indigo版本中添加到Dali的JPQL验证。如果您选择了Hibernate平台的JPA项目,您仍将获得Hibernate Tools对JPQL / HQL的任何有效性。

转到“查询和生成器”下的工作区首选项“Java持久性” - >“JPA->错误/警告”,并将“无效或不完整的JPQL查询”更改为“忽略”。如果您希望它们扩展Hibernate平台的Dali JPQL验证或者默认情况下将其关闭,您可以输入针对Hibernate工具的错误。

答案 1 :(得分:1)

事实上,这不是一个有效的JPQL查询。 JPQL以“SELECT”,“UPDATE”或“DELETE”开头。

显然它可能在Hibernate(即HQL)中有效,但该查询不是标准的,也不是可移植的。因此,如果您不想更改查询,那么您不使用JPA,并且您的应用程序是不可移植的。

JPA规范将证实这一点。

答案 2 :(得分:1)

它在我看来像任何形式的查询:

from Person p where p.name = :name

实际上并不是有效的JPQL。根据语言参考:

http://docs.oracle.com/javaee/5/tutorial/doc/bnbuf.html

每个语句都需要在SELECT部分之前添加UPDATEDELETEFROM语句。

以下是更多示例:

http://en.wikipedia.org/wiki/Java_Persistence_Query_Language

不幸的是,您似乎需要更新所有查询以使其符合此格式。

答案 3 :(得分:1)

它不是有效的JPQL查询。它是一个有效的HQL查询,但是HQL不是JPQL。 JPQL查询必须有一个select子句。

这里是JPQL子句的BNF语法,来自规范:

select_statement :: = select_clause from_clause [where_clause] [groupby_clause [having_clause] [orderby_clause]