5

実動コードでうまく機能している Java エンティティークラスがいくつかあります。まったく同じクラスを再利用しているこのアプリケーションの自動テストを作成しています。

テスト アプリケーションがエンティティ マネージャーを次のように作成している場合:

 Properties props = new Properties();
 props.setProperty("provider", "org.apache.openjpa.persistence.PersistenceProviderImpl");
 props.setProperty(...);      
 EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("foobar-upgrade-restful-test", props);

 EntityManager entityManager = entityManagerFactory.createEntityManager();

アプリケーションは、次のことを伝えるエラー メッセージをスローします。

Caused by: <openjpa-2.2.0-r422266:1244990 fatal user error> org.apache.openjpa.persistence.ArgumentException: You have supplied columns for "com.foo.bar.server.commontypes.job.CompositeJob", but this mapping cannot have columns in this context.
    at org.apache.openjpa.jdbc.meta.MappingInfo.assertNoSchemaComponents(MappingInfo.java:382)
    at org.apache.openjpa.jdbc.meta.strats.FlatClassStrategy.map(FlatClassStrategy.java:51)
    at org.apache.openjpa.jdbc.meta.ClassMapping.setStrategy(ClassMapping.java:392)
    at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(RuntimeStrategyInstaller.java:56)
    at org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:411)
    at org.apache.openjpa.meta.MetaDataRepository.preMapping(MetaDataRepository.java:762)
    at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:651)
    ... 72 more

同じエンティティ Bean が Glassfish の下のアプリケーションで動作しており、persistence.xml もほぼ同じであるため、エラー メッセージがよくわかりません。(テストRESOURCE_LOCALでは JTA の代わりに tx を使用しましたが、このエラーとの関係は疑わしいです。

何が悪いのか分かりますか?

4

1 に答える 1

4

このエラーは、 に提供したマッピング情報に問題があることを示していますcom.foo.bar.server.commontypes.job.CompositeJob

JTAで機能する理由を推測していますが、リソースローカルではなく、さまざまな環境でメタデータがロード/処理される方法の奇妙な点に関係している可能性が最も高いです。エンティティから関連するマッピング データを投稿すると役立ちます。

于 2012-11-23T13:09:37.613 に答える