support Java5 wildcard on OpenJPA --------------------------------- Key: OPENJPA-145 URL: https://issues.apache.org/jira/browse/OPENJPA-145 Project: OpenJPA Issue Type: Improvement Components: jpa, kernel Environment: OPENJPA 0.95 Reporter: yun teng
This enhancement request is to support Java 5 wildcard on OpenJPA. The java 5 widecard is defined at http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#Wildcards Currently, iusing java 5 widecard annotation in OpenJPA will cause org.apache.openjpa.persistence.ArgumentException for example package parent; public Class Account { ... @OneToMany(mappedBy="account", cascade={CascadeType.ALL}) private Set<? extends AccountPerson> accountPersonCollection; ...} public Class AccountPerson{...} ______________________________________________________________________ package child; public Class Account extend parent.Account { } public Class AccountPerson{..} In such case, the parent.Account has relationship to parent.AccountPerson, while child.Account has relationship to child.AccountPerson. Now if I do not use wildcard, my test passed. If I use wildcard, Java compile and Kodo enhancement all worked fine. But at runtime, I got the following exception 766 TRACE [main] openjpa.MetaData - Resolving field "[EMAIL PROTECTED] ion". 766 WARN [main] openjpa.MetaData - OpenJPA cannot map field "com.psi.vida.platform.entity.pojo.Account.accountPersonCollection" efficiently. It is of an unsupported type. The field value will be serialized to a BLOB by default. <4|true|0.9.5-incubating> org.apache.openjpa.persistence.ArgumentException: Errors encountered while resolving metadata. See nested exceptions for details. at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.ja va:500) at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepositor y.java:284) at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepositor y.java:519) at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.ja va:480) at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepositor y.java:284) at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2343) at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2196) at kodo.kernel.KodoBroker.persist(KodoBroker.java:155) at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java :991) at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerIm pl.java:486) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManag erInvocationHandler.invoke(SharedEntityManagerCreator.java:176) at $Proxy5.persist(Unknown Source) at com.psi.vida.platform.util.VidaEntityManager.saveNew(VidaEntityManager.j ava:160) at com.psi.vida.platform.util.VidaEntityManager.save(VidaEntityManager.java :114) at com.psi.vida.platform.util.VidaEntityManagerTest.testSave(VidaEntityMana gerTest.java:50) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase .java:69) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTe stRunner.java:421) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUni tTestRunner.java:912) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitT estRunner.java:766) Caused by: <4|true|0.9.5-incubating> org.apache.openjpa.persistence.ArgumentException: Field "com.psi.vida.platform.entity.pojo.Account.accountNoteCollection" cannot declare that it is mapped by another field. Its mapping strategy (org.apache.openjpa.jdbc.meta.strats.MaxEmbeddedBlobFieldStrategy) does not support mapping by another field. at org.apache.openjpa.jdbc.meta.strats.AbstractFieldStrategy.assertNotMappe dBy(AbstractFieldStrategy.java:56) at org.apache.openjpa.jdbc.meta.strats.MaxEmbeddedLobFieldStrategy.map(MaxE mbeddedLobFieldStrategy.java:73) at org.apache.openjpa.jdbc.meta.strats.MaxEmbeddedBlobFieldStrategy.map(Max EmbeddedBlobFieldStrategy.java:96) at org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy(FieldMapping.java: 117) at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(Ru ntimeStrategyInstaller.java:77) at org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.ja va:435) at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:400) at org.apache.openjpa.jdbc.meta.ClassMapping.resolveNonRelationMappings(Cla ssMapping.java:819) at org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRep ository.java:311) at org.apache.openjpa.meta.MetaDataRepository.loadMapping(MetaDataRepositor y.java:586) at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.ja va:486) ... 34 more NestedThrowables: <4|true|0.9.5-incubating> org.apache.openjpa.persistence.ArgumentException: Field "com.psi.vida.platform.entity.pojo.Account.accountPersonCollection" cannot declare that it is mapped by another field. Its mapping strategy (org.apache.openjpa.jdbc.meta.strats.MaxEmbeddedBlobFieldStrategy) does not support mapping by another field. at org.apache.openjpa.jdbc.meta.strats.AbstractFieldStrategy.assertNotMappe dBy(AbstractFieldStrategy.java:56) at org.apache.openjpa.jdbc.meta.strats.MaxEmbeddedLobFieldStrategy.map(MaxE mbeddedLobFieldStrategy.java:73) at org.apache.openjpa.jdbc.meta.strats.MaxEmbeddedBlobFieldStrategy.map(Max EmbeddedBlobFieldStrategy.java:96) at org.apache.openjpa.jdbc.meta.FieldMapping.setStrategy(FieldMapping.java: 117) at org.apache.openjpa.jdbc.meta.RuntimeStrategyInstaller.installStrategy(Ru ntimeStrategyInstaller.java:77) at org.apache.openjpa.jdbc.meta.FieldMapping.resolveMapping(FieldMapping.ja va:435) at org.apache.openjpa.jdbc.meta.FieldMapping.resolve(FieldMapping.java:400) at org.apache.openjpa.jdbc.meta.ClassMapping.resolveNonRelationMappings(Cla ssMapping.java:819) at org.apache.openjpa.jdbc.meta.ClassMapping.resolveMapping(ClassMapping.ja va:779) at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1568) at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataReposit ory.java:640) at org.apache.openjpa.meta.MetaDataRepository.resolveMapping(MetaDataReposi tory.java:601) at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.ja va:492) at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepositor y.java:284) at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepositor y.java:519) at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.ja va:480) at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepositor y.java:284) at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2343) at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2196) at kodo.kernel.KodoBroker.persist(KodoBroker.java:155) at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java :991) at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerIm pl.java:486) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManag erInvocationHandler.invoke(SharedEntityManagerCreator.java:176) at $Proxy5.persist(Unknown Source) at com.psi.vida.platform.util.VidaEntityManager.saveNew(VidaEntityManager.j ava:160) at com.psi.vida.platform.util.VidaEntityManager.save(VidaEntityManager.java :114) at com.psi.vida.platform.util.VidaEntityManagerTest.testSave(VidaEntityMana gerTest.java:50) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase .java:69) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTe stRunner.java:421) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUni tTestRunner.java:912) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitT estRunner.java:766) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.