我正在开始一个新项目,并且我被告知通常“下载所有内容并构建它”任务。 该项目跨越不同的eclipse项目,所有这些都使用maven进行依赖管理,直到这个特定项目,“导入SVN项目到eclipse - >右键单击 - > configure - >转换为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)”出现在fourht行中的三次。所有这些错误都标有“表达式无效,这意味着它不遵循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,但我强烈认为我的问题不需要对实际语法做任何事情。我已经尝试过多次,我记得重新下载所有内容并重新编写/更新它。该项目不可能是错误的,因为它是在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") })
在通过Java Decompiler后,这是jar文件中的同一行:
@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文件有更多差异。不过,这也不是出现错误消息的原因。
答案 0 :(得分:0)
好吧,我设法解决了这个问题。
事实证明,错误是a known bug in Kepler,这可以通过禁用JPA验证来解决(而且它似乎已经修复了任何进行验证的新版本的错误)并从中重新下载项目SVN。
似乎我的同事从一开始就禁用了验证,他不记得何时禁用它。哦,好吧......