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_LOCALtx 而不是 JTA 但我怀疑它与这个错误有关。

你知道有什么问题吗?

4

1 回答 1

4

该错误表明您提供的映射信息存在问题com.foo.bar.server.commontypes.job.CompositeJob

我猜测它适用于 JTA 的原因,但不是本地资源很可能与在不同环境中加载/处理元数据的方式有些奇怪有关。如果您从您的实体发布相关的映射数据,将会很有帮助。

于 2012-11-23T13:09:37.613 回答