[
https://issues.apache.org/jira/browse/JDO-539?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12533251
]
Michelle Caisse commented on JDO-539:
-------------------------------------
Hi Andy,
The goal was to have a Map field in Person (JPAAppPerson) that got mapped to a
join table (employee_phoneno_type). JPA seems to require the Map value to be
an entity, so we created JPAAppPhoneNumber. I've remapped it as follows, and so
far it seems to work, as we get to the next problem (new JIRA):
In JPAAppPerson, the map key is now the oid of JPAAppPhoneNumber (JPA default):
@OneToMany
private Map<org.apache.jdo.tck.pc.companyAnnotatedJPA.JPAAppPhoneNumber.Oid,
JPAAppPhoneNumber> phoneNumbers = new HashMap();
JPAAppPhoneNumber mappings:
@Id
@Column(name="PERSONID")
private long personid;
@Id
@Column(name="TYPE")
private String type;
@Column(name="PHONENO")
private String phoneNumber
> JPA annotations tests fail
> --------------------------
>
> Key: JDO-539
> URL: https://issues.apache.org/jira/browse/JDO-539
> Project: JDO
> Issue Type: Bug
> Components: tck2
> Affects Versions: JDO 2 maintenance release 1
> Reporter: Michelle Caisse
> Assignee: Andy Jefferson
>
> companyAnnotatedNoRelationshipsJPAConcrete.conf and
> companyAnnotatedNoRelationshipsJPAConcrete.conf fail:
> test(org.apache.jdo.tck.mapping.CompletenessTest)javax.jdo.JDOUserException:
> One or more instances could not be made persistent
> at
> org.jpox.AbstractPersistenceManager.makePersistentAll(AbstractPersistenceManager.java:694)
> at
> org.apache.jdo.tck.mapping.CompletenessTest.localSetUp(CompletenessTest.java:79)
> at org.apache.jdo.tck.JDO_Test.setUp(JDO_Test.java:237)
> at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:253)
> at
> org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
> at
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
> at
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
> NestedThrowablesStackTrace:
> javax.jdo.JDOFatalInternalException: Duplicate column name "PERSONID" defined
> for table "applicationidentity0.EMPLOYEE_PHONENO_TYPE". You cannot map
> multiple fields to the same column. The duplicated columns are specified by
> org.apache.jdo.tck.pc.companyAnnotatedJPA.JPAAppPhoneNumber.personid and
> org.apache.jdo.tck.pc.companyAnnotatedJPA.JPAAppPhoneNumber.person.
> at
> org.jpox.jdo.JPOXJDOHelper.getJDOExceptionForJPOXException(JPOXJDOHelper.java:369)
> at
> org.jpox.AbstractPersistenceManager.jdoMakePersistent(AbstractPersistenceManager.java:631)
> at
> org.jpox.AbstractPersistenceManager.makePersistentAll(AbstractPersistenceManager.java:680)
> at
> org.apache.jdo.tck.mapping.CompletenessTest.localSetUp(CompletenessTest.java:79)
> at org.apache.jdo.tck.JDO_Test.setUp(JDO_Test.java:237)
> at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:253)
> at
> org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
> at
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
> at
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
> NestedThrowablesStackTrace:
> Duplicate column name "PERSONID" defined for table
> "applicationidentity0.EMPLOYEE_PHONENO_TYPE". You cannot map multiple fields
> to the same column. The duplicated columns are specified by
> org.apache.jdo.tck.pc.companyAnnotatedJPA.JPAAppPhoneNumber.personid and
> org.apache.jdo.tck.pc.companyAnnotatedJPA.JPAAppPhoneNumber.person.
> org.jpox.store.rdbms.exceptions.DuplicateColumnNameException: Duplicate
> column name "PERSONID" defined for table
> "applicationidentity0.EMPLOYEE_PHONENO_TYPE". You cannot map multiple fields
> to the same column. The duplicated columns are specified by
> org.apache.jdo.tck.pc.companyAnnotatedJPA.JPAAppPhoneNumber.personid and
> org.apache.jdo.tck.pc.companyAnnotatedJPA.JPAAppPhoneNumber.person.
> at
> org.jpox.store.rdbms.table.AbstractTable.addDatastoreField(AbstractTable.java:261)
> at
> org.jpox.store.rdbms.mapping.RDBMSMappingManager.createDatastoreField(RDBMSMappingManager.java:840)
> at
> org.jpox.store.mapping.PersistenceCapableMapping.prepareDatastoreMapping(PersistenceCapableMapping.java:227)
> at
> org.jpox.store.mapping.PersistenceCapableMapping.initialize(PersistenceCapableMapping.java:123)
> at
> org.jpox.store.mapping.MappingFactory.createMapping(MappingFactory.java:93)
> at
> org.jpox.store.mapping.AbstractMappingManager.getMapping(AbstractMappingManager.java:234)
> at
> org.jpox.store.rdbms.table.ClassTable.manageFields(ClassTable.java:520)
> at
> org.jpox.store.rdbms.table.ClassTable.manageClass(ClassTable.java:400)
> at
> org.jpox.store.rdbms.table.ClassTable.initializeForClass(ClassTable.java:971)
> at org.jpox.store.rdbms.table.ClassTable.initialize(ClassTable.java:271)
> at
> org.jpox.store.rdbms.RDBMSManager$ClassAdder.initializeClassTables(RDBMSManager.java:3408)
> at
> org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTablesAndValidate(RDBMSManager.java:3315)
> at
> org.jpox.store.rdbms.RDBMSManager$ClassAdder.run(RDBMSManager.java:2943)
> at
> org.jpox.store.rdbms.RDBMSManager$MgmtTransaction.execute(RDBMSManager.java:2822)
> at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:859)
> at org.jpox.store.StoreManager.addClass(StoreManager.java:481)
> at org.jpox.store.StoreManager.getDatastoreClass(StoreManager.java:1089)
> at
> org.jpox.state.JDOStateManagerImpl.populateStrategyFields(JDOStateManagerImpl.java:661)
> at
> org.jpox.state.JDOStateManagerImpl.initialiseForPersistentNew(JDOStateManagerImpl.java:408)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.