@NamedQuery 元素的错误直接来自存储库

Errors on @NamedQuery elements straight from repository

我正在开始一个新项目,我被告知通常的 "download everything and build it" 任务。 该项目跨越不同的 eclipse 项目,所有这些项目都使用 maven 进行依赖管理,并且,直到这个特定项目,"import SVN project to eclipse -> right click -> configure -> convert to maven project" 工作得很好。

这个项目有问题。它似乎使用 JPA 进行数据库访问(有几个实体 类 带有注释的 @NamedQuery 元素),但是,不知何故,eclipse 报告其中一些查询是错误的("A select statement must have a FROM clause" 和 "The expression is invalid, which means it does not follow the JPQL grammar" 是重复次数最多的错误)。

所以这是给出错误的代码示例:

@javax.persistence.Entity
@Table(name = "TABLE_NAME")
    @NamedQueries({
        @NamedQuery(name = UserEntity.ALL, query = "select u from UserEntity u"),
        @NamedQuery(name = UserEntity.ALL_PAGINATION, query = "select u from UserEntity u ORDER BY lower(u.alias)"),
        @NamedQuery(name = UserEntity.ALL_FILTER_PAGINATION, query = "select u from UserEntity u where u.alias LIKE lower(:query) OR u.email LIKE lower(:query) OR lower(u.documentNumber) LIKE lower(:query) ORDER BY u.alias"),
        @NamedQuery(name = UserEntity.COUNT_ALL, query = "select count(u) from UserEntity u") })

在这里,它抱怨第三行 ("lower(u.alias)" 被标记,并且 "lower(:query) 在它出现在第四行的三次。所有这些错误都用 "The expression is invalid, which means it does not follow the JPQL grammar"。如果需要,我可以提供更多错误。

问题是我是唯一遇到此错误的人。我团队的另一个开发人员前段时间得到了他的东西,他的项目没有失败,这让我认为这与依赖关系有关。

项目的 pom.xml 文件内容如下:

    <!--  JPA  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>            
    </dependency>

我在我们的nexus服务器中搜索并将javax.persistence更改为最新版本的特定代码无济于事:

<dependency>
  <groupId>javax.persistence</groupId>
  <artifactId>persistence-api</artifactId>
  <version>1.0.2</version>
</dependency>

其他开发人员不知道发生了什么,我也没有用过 JPA,但我有一种强烈的感觉,我的问题与实际语法无关。我已经尝试了很多次,我记得重新下载所有内容并 re-maven/update 它。项目不会错,因为它是 2 年前上传的,从那以后就没有动过(或者看起来是这样),所以它一定是与依赖项或配置相关的东西,但我不知道现在要移动到哪里.

我在这里缺少什么?

编辑: 好的,这段代码(我们称它为 ProjectDep)是对 ProjectA 的依赖。我向其他开发人员询问了此代码项目的 .jar 文件,看它是否有效,并且工作正常(关闭我的 ProjectDep 版本后)。

这是 SVN 代码中的错误行之一:

@javax.persistence.Entity
@Table(name = "TABLE_NAME_WHATEVER")
@NamedQueries({
        @NamedQuery(name = FormNameEntity.ALL, query = "select ns from FormNameEntity ns"),
        @NamedQuery(name = FormNameEntity.BY_FLOW_ID, query = "select ns from FormNameEntity ns where formFlowId = :formFlowId") })

这与 jar 文件中的同一行,经过 Java 反编译器后:

@javax.persistence.Entity
@Table(name="TABLE_NAME_WHATEVER")
@NamedQueries({@javax.persistence.NamedQuery(name="all", query="select ns from FormNameEntity ns"), @javax.persistence.NamedQuery(name="byFlowId", query="select ns from FormNameEntity ns where formFlowId = :formFlowId")})

区别比较大,好像jar文件上的区别比较多。不过,这不是出现错误消息的原因。

好吧,我设法解决了这个问题。

事实证明,错误是 a known bug in Kepler 可以通过禁用 JPA 验证来解决(而且它似乎是一个错误已经在任何进行验证的新版本上修复)并重新下载项目来自 SVN.

我的同事似乎从一开始就禁用了验证,他不记得他是什么时候禁用的。哦,好吧...