0

JPA 1.0 ファセットを有効にして、Rational Software Architect 8.0.4 で構成しました。IDを除くほとんどすべてのエンティティクラスを自動生成します。そのため、手動で追加します。ACCESS_AUTHORIZATION テーブルと 1 対多の関係を持つ単純なテーブル 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のスナップショットは次のとおりです。

ここに画像の説明を入力

ここで私が間違っていることを誰かが教えてくれますか? その名前のフィールドは、エンティティ クラスで明確に定義されています。また、クラスが強化されていないという以前のエラーがあったため、[これに続いて]クラスを強化する必要があったことにも言及したいと思います。

4

1 に答える 1

1

OpenJPA で名前付きクエリを作成するときは、ネイティブ SQL ではなく JPQL を作成していることに注意してください。構文は似ていますが、少し異なります。

この場合、名前付きクエリを次のように変更することをお勧めします。

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

これにより、一連の AccessAuthorizationV オブジェクトを含む AppUserEntity クラスのオブジェクトが返されます (デフォルトでは遅延ロードされます)。

詳細については、JPQL 言語リファレンスを参照してください。

于 2012-10-30T03:54:57.860 に答える