3

初めて OpenJPA 2.0.1 を試してみましたが、次のようになりました。

79  WARN   [main] openjpa.Runtime - The configuration property named "openjpa.Id" was not recognized and will be ignored, although the name closely matches a valid property called "openjpa.Id".
179  INFO   [main] openjpa.Runtime - Starting OpenJPA 2.0.1
371  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.PostgresDictionary" (PostgreSQL 8.4.4 ,PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)).
<openjpa-2.0.1-r422266:989424 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance "x.quality.QualityQuery@4c4b11e9" to PersistenceCapable failed.  Ensure that it has been enhanced.
FailedObject: x.quality.QualityQuery@4c4b11e9
    at org.apache.openjpa.kernel.BrokerImpl.assertPersistenceCapable(BrokerImpl.java:4559)
    at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2561)
    at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423)
    at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069)
    at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:706)
    at ...

OpenJPA docsによると、実行時に基本的な拡張機能を取得するために何もする必要はありません。

2.5。OpenJPA エンハンサーの省略

OpenJPA では、エンハンサーを実行する必要はありません。エンハンサーを実行しない場合、OpenJPA は、実行環境に応じて、状態を追跡するためのいくつかの代替手段のいずれかにフォールバックします。

Java 6 クラスの再変換:

アプリケーションを Java 6 環境で実行している場合、OpenJPA は ClassTransformer を動的に登録しようとします。この ClassTransformer は、永続データへのアクセスを追跡するためにその場で永続クラスを再定義します。さらに、OpenJPA は永続クラスごとにサブクラスを作成します。クエリを実行するかリレーションをトラバースすると、OpenJPA はサブクラスのインスタンスを返します。これは、instanceof 演算子が期待どおりに機能することを意味しますが、o.getClass() は作成したクラスではなくサブクラスを返します。この動作を取得するために何もする必要はありません。OpenJPA は、実行環境が Java 6 クラスの再変換に対応しているかどうかを自動的に検出します。

これが機能しない理由の手がかりはありますか?どうもありがとう...

(openjpa.Id警告が発生する理由のボーナスポイント-そのようなプロパティを設定していません...)

4

1 に答える 1

2

ああ、答えは渡すことだったことがわかりました:

"openjpa.RuntimeUnenhancedClasses" => RuntimeUnenhancedClassesModes.SUPPORTED

構成マップに。なぜこれがより明確に文書化されていないのか、私にはわかりません...

于 2010-11-05T02:47:08.223 に答える