PersistenceCapableにインスタンスをキャストしようとすることは失敗しました。強化されていることを確認してください
質問
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ドキュメント, 、実行時に基本的な強化を得るために何もする必要はないはずです:
2.5。 OpenJPAエンハンサーを省略します
OpenJPAは、エンハンサーを実行する必要はありません。エンハンサーを実行しない場合、OpenJPAは、実行環境に応じて、州の追跡のためのいくつかの可能な選択肢の1つに戻ります。
Java 6クラスの再確認:
Java 6環境でアプリケーションを実行している場合、OpenJPAは、永続的なクラスを再定義して永続的なデータへのアクセスを追跡するクラストランスフォーマーを動的に登録しようとします。さらに、OpenJPAは、永続的なクラスごとにサブクラスを作成します。クエリを実行したり、関係をトラバースしたりすると、OpenJPAはサブクラスのインスタンスを返します。これは、オペレーターのインスタンスが期待どおりに機能することを意味しますが、O.getClass()は、書いたクラスの代わりにサブクラスを返します。この動作を得るために何もする必要はありません。 OpenJPAは、実行環境がJava 6クラスの再確認できるかどうかを自動的に検出します。
なぜこれが機能していないのかについての手がかりはありますか?どうもありがとう...
(Openjpa.idの警告が発生する理由のボーナスポイント - 私はそのようなプロパティを設定していません...)
解決
ああ、答えは渡すことだったことが判明しました:
"openjpa.RuntimeUnenhancedClasses" => RuntimeUnenhancedClassesModes.SUPPORTED
構成マップまで。なぜこれがより明確に文書化されていないのか、よくわかりません...
所属していません StackOverflow