db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig Russell (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JDO-539) JPA annotations tests fail
Date Fri, 12 Oct 2007 18:12:50 GMT

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


Mime
View raw message