0

我已经在我的 Rational Software Architect 8.0.4 中通过启用 JPA 1.0 方面对其进行了配置。它自动生成几乎所有我的实体类,除了 id 的。所以我手动添加它们。我正在尝试查询与 ACCESS_AUTHORIZATION 表具有一对多关系的简单表 APP_USER。有关配置和实体类,请参见下文。

自动实体生成过程中我的表之间的关系

APP_USER 实体

在此处输入图像描述

当我尝试执行一个简单的命名查询时

SELECT a.accessAuthorizationVs, a.empName, a.userCnum FROM AppUserEntity a WHERE a.userCnum = :userCnum

它抛出一个异常

**org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter "SELECT a.accessAuthorizationVs, a.empName, a.userCnum FROM AppUserEntity a WHERE a.userCnum = :userCnum". Error message: No field named "accessAuthorizationVs" in class "class com.xxx.xxx.xxx.services.integration.entity.AppUserEntity".**
    at org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(AbstractExpressionBuilder.java:118)
    at org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.traversePath(AbstractExpressionBuilder.java:284)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getPath(JPQLExpressionBuilder.java:1382)
    at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getPathOrConstant(JPQLExpressionBuilder.java:1337)

这是我的 persistence.xml 的快照:

在此处输入图像描述

谁能指导我在这里做错了什么?该名称的字段在我的实体类中明确定义。另外我想提一下,我必须增强类 [followed this]因为之前有一个关于类没有被增强的错误。

4

1 回答 1

1

当您在 OpenJPA 中创建命名查询时,请记住您正在编写 JPQL,而不是本机 SQL。语法类似,但略有不同。

在这种情况下,我建议将您的命名查询更改为以下内容:

SELECT a FROM AppUserEntity a WHERE a.userCnum = :userCnum

这将返回 AppUserEntity 类的对象,其中将包括一组 AccessAuthorizationV 对象(默认为延迟加载)。

有关更多详细信息,请参阅JPQL 语言参考

于 2012-10-30T03:54:57.860 回答