[ 
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.

Reply via email to