gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:54 27 4
gpt4 key购买 nike

我正在开始一个新项目,我被告知通常的“下载所有内容并构建它”任务。该项目跨越不同的 eclipse 项目,所有项目都使用 maven 进行依赖管理,并且直到这个特定项目为止,“将 SVN 项目导入 eclipse -> 右键 -> 配置 -> 转换为 maven 项目”一直运行良好。

问题出在这个项目上。它似乎使用 JPA 进行数据库访问(有几个带有注释的 @NamedQuery 元素的实体类),但是,不知何故,eclipse 报告其中一些查询是错误的(“select 语句必须有 FROM 子句”和“表达式无效,这意味着它不遵循 JPQL 语法”是最重复的错误)。

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

@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)”。所有这些错误都被标记为“表达式无效,这意味着它不遵循 JPQL 语法”。如果需要,我可以提供我收到的更多错误。

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

该项目的 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,但我有一种强烈的感觉,我的问题不必与实际语法做任何事情。我已经尝试了很多次,我记得重新下载所有内容并重新 Maven/更新它。该项目不可能是错误的,因为它是 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 Decompiler 后:

@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 重新下载项目即可解决。

似乎我的同事从一开始就禁用了验证,并且他不记得何时禁用它。哦,好吧...

关于java - 直接来自存储库的 @NamedQuery 元素上的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35650413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com