【问题标题】:Eclipse Indigo - JPA Validation ProblemsEclipse Indigo - JPA 验证问题
【发布时间】:2012-06-28 21:38:32
【问题描述】:

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

【问题讨论】:

    标签: java eclipse validation jpa jpql


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在我看来,它类似于以下形式的任何查询:

      from Person p where p.name = :name
      

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

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

      每个语句都需要在FROM 部分之前有一个SELECTUPDATEDELETE 语句。

      这里有更多例子:

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

      很遗憾,您似乎需要更新所有查询以使其符合此格式。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          JPA 规范会证实这一点。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多