[ https://issues.apache.org/jira/browse/JDO-539?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12534353 ]
Craig Russell commented on JDO-539: ----------------------------------- > You have a PK field with a column name of PERSONID, and you also want a N-1 > to have a FK using the same column (the PK) ? I'd expect the second to have > its own column - it cannot reuse the PK (JPA1 has no support for "compound > identity"/"identifying" relations) The ability to map a single column to multiple fields is a pretty common extension in JPA implementations. The infrastructure is there to mark one of the field's column as insertable=false, updatable=false. In our case, both Person person and long personid are mapped to the same column, but the person column annotation would be marked as not updatable. If you don't support the insertable=false, updatable=false, you cannot map simple relationships such as Order-OrderLine. With the insertable=false, updatable=false trick, you can at least work around it. And other JPA vendors do implement this trick. Of course, you could implement the JPA 2 version (still in committee but pretty close to adoption)... Any hope for a JPOX version that allows us to map the EMPLOYEE_PHONENO_TYPE table using any trick you can think of? > 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: Michelle Caisse > > 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.