2012-11-23 12 views
5

Ho alcune classi di entità Java che funzionano bene nel mio codice di produzione. Sto scrivendo un test automatico per questa applicazione in cui sto riutilizzando le stesse classi.OpenJPA dice: Hai fornito le colonne per FooBar ma questa mappatura non può avere colonne in questo contesto

Quando l'applicazione di test sta creando il suo gestore di entità in questo modo:

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(); 

Le applicazioni genera un messaggio di errore dicendo che:

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 

Non capisco davvero il messaggio di errore come lo stesso il bean di entità funziona nell'applicazione in Glassfish e anche il persistence.xml è quasi identico. (Nel test che uso RESOURCE_LOCAL tx invece di JTA ma dubito che ha relazione con questo errore.

Hai idea di cosa c'è che non va?

+1

Si consiglia di ovide i due mapping XML per questa entità. Probabilmente sono, come hai detto tu, quasi identici e il problema è legato alla mappatura. – dan

+0

Non ci sono mappature xml, utilizzo la configurazione basata su annotazioni e quindi non c'è differenza. – jabal

+0

Il tuo ambiente di test (puoi fornire maggiori dettagli) supporta le annotazioni per JPA? Stai elencando le tue entità nel persistence.xml? – JScoobyCed

risposta

4

L'errore indica che c'è un problema con le informazioni di mapping che hai fornito per com.foo.bar.server.commontypes.job.CompositeJob.

Sto indovinando il motivo per cui funziona per JTA, ma non la risorsa locale molto probabilmente ha a che fare con qualche stranezza nel modo in cui i metadati vengono caricati/elaborati nei diversi ambienti. utile se si pubblicano i dati di mappatura rilevanti dalla propria Entity

+1

Grazie a @Rick. Ho avuto un bel po 'di problemi come questo di recente. Ho controllato le seguenti cose: 1. La mappatura è corretta - onetaria, onetomane ...., 2. L'entità ha ragione e ha una rappresentazione per tutte le colonne specificate nello schema, 3. Il nome della tabella è dichiarato (sì, l'ho fatto manca questo), 4. L'entità viene aggiunta a persistence.xml – Alice

+0

@Alice - Suggerirei di postare una domanda alla mailing list degli utenti di openjpa con i dettagli sulle Entità. – Rick

+0

Grazie a @Rick. Sono stato in grado di risolvere questi problemi. Ho avuto lo stesso errore di cui sopra. Ho aggiunto la checklist di cose che mi hanno aiutato a risolvere i problemi in quanto potrebbero aiutare anche qualcun altro. Grazie ancora. – Alice

Problemi correlati