I think I might know whats going on. JPA supports OneToMany and ManyToOne
relationships between entities.
In the above xml, MovieBean and DirectorBean are specified as Entities and
not Movie and Director.
According to the code (below), Movie and Director are the "non-entities"
stored in the collection and you cannot use them in OneToMany or ManyToOne
relationships

 public abstract Collection<Movie> getMovies()


    public abstract Director getDirector();

    public abstract void setDirector(Director director);

PS:- One could use the @PersistentCollection , which is supported by OpenJPA
for Collection of primitives, wrappers, Strings, embedded and "Simple" types
(ours are simple types).



On Wed, Jun 11, 2008 at 5:37 PM, David Blevins <[EMAIL PROTECTED]>
wrote:

>
> On Jun 11, 2008, at 1:41 AM, Dain Sundstrom wrote:
>
>  Can you post the contents of openejb-cmp-generated-orm.xml?  My guess the
>> problem is in the generated code, but I'd like to see the orm.xml file if
>> you have it handy.
>>
>
> Here it is:
>
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm";
> version="1.0">
>    <entity name="MovieBean" class="openejb.org.superbiz.cmp2.MovieBean">
>        <description>classes#MovieBean</description>
>        <table/>
>        <named-query name="MovieBean.findByDirector(java.lang.String)">
>            <query>SELECT m FROM MovieBean m WHERE m.director = ?1</query>
>        </named-query>
>        <named-query name="MovieBean.findAll">
>            <query>SELECT m FROM MovieBean as m</query>
>        </named-query>
>        <attributes>
>            <id name="id">
>                <generated-value strategy="IDENTITY"/>
>            </id>
>            <basic name="year"/>
>            <basic name="title"/>
>            <many-to-one name="director"/>
>        </attributes>
>    </entity>
>    <entity name="DirectorBean"
> class="openejb.org.superbiz.cmp2.DirectorBean">
>        <description>classes#DirectorBean</description>
>        <table/>
>        <named-query
> name="DirectorBean.findByName(java.lang.String,java.lang.String)">
>            <query>SELECT d FROM DirectorBean d WHERE d.lastName = ?1 AND
> d.firstName = ?2</query>
>        </named-query>
>        <named-query name="DirectorBean.findAll">
>            <query>SELECT d FROM DirectorBean m</query>
>        </named-query>
>        <attributes>
>            <id name="id">
>                <generated-value strategy="IDENTITY"/>
>            </id>
>            <basic name="firstName"/>
>            <basic name="lastName"/>
>            <one-to-many name="movies" mapped-by="director">
>                <cascade>
>                    <cascade-all/>
>                </cascade>
>            </one-to-many>
>        </attributes>
>    </entity>
> </entity-mappings>
>
>
> -David
>
>
>
>
>
>>
>> -dain
>>
>> On Jun 11, 2008, at 12:08 AM, David Blevins wrote:
>>
>>  Hacking up a new cmp2 example:
>>> http://people.apache.org/~dblevins/simple-cmp2.tar.gz<http://people.apache.org/%7Edblevins/simple-cmp2.tar.gz>
>>> http://people.apache.org/~dblevins/simple-cmp2/<http://people.apache.org/%7Edblevins/simple-cmp2/>
>>>   (unpacked)
>>>
>>>
>>> I think things are fine but now getting the error below.  Could mean that
>>> I need to have the agent installed.  If someone who knows better could give
>>> it a quick look over for simple mistakes that'd be great -- won't be able to
>>> get back at it till much later tomorrow.
>>>
>>> -David
>>>
>>>
>>> ERROR - The bean instance business method encountered a system exception:
>>> org.xml.sax.SAXException:
>>> jar:file:/tmp/OpenEJB_Generated_49666.jar!/META-INF/openejb-cmp-generated-orm.xml
>>> [Location: Line: 36, C: 61]: The type of field
>>> "openejb.org.superbiz.cmp2.DirectorBean.movies" isn't supported by declared
>>> persistence strategy "OneToMany".  Please choose a different strategy.
>>> <openjpa-1.0.1-r420667:592145 nonfatal general error>
>>> org.apache.openjpa.persistence.PersistenceException:
>>> org.xml.sax.SAXException:
>>> jar:file:/tmp/OpenEJB_Generated_49666.jar!/META-INF/openejb-cmp-generated-orm.xml
>>> [Location: Line: 36, C: 61]: The type of field
>>> "openejb.org.superbiz.cmp2.DirectorBean.movies" isn't supported by declared
>>> persistence strategy "OneToMany".  Please choose a different strategy.
>>>        at
>>> org.apache.openjpa.persistence.PersistenceMetaDataFactory.parseXML(PersistenceMetaDataFactory.java:249)
>>>        at
>>> org.apache.openjpa.persistence.PersistenceMetaDataFactory.load(PersistenceMetaDataFactory.java:198)
>>>        at
>>> org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:433)
>>>        at
>>> org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:288)
>>>        at
>>> org.apache.openjpa.jdbc.meta.MappingRepository.getMapping(MappingRepository.java:282)
>>>        at
>>> org.apache.openjpa.jdbc.meta.MappingTool.getMapping(MappingTool.java:673)
>>>        at
>>> org.apache.openjpa.jdbc.meta.MappingTool.buildSchema(MappingTool.java:745)
>>>        at
>>> org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:643)
>>>        at
>>> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:164)
>>>        at
>>> org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:130)
>>>        at
>>> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>>>        at
>>> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>>>        at
>>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
>>>        at
>>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
>>>        at
>>> org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:105)
>>>        at
>>> org.apache.openejb.persistence.JtaEntityManager.getEntityManager(JtaEntityManager.java:61)
>>>        at
>>> org.apache.openejb.persistence.JtaEntityManager.getDelegate(JtaEntityManager.java:92)
>>>        at
>>> org.apache.openejb.persistence.JtaEntityManager.getDelegate(JtaEntityManager.java:41)
>>>        at
>>> org.apache.openejb.core.cmp.jpa.JpaCmpEngine.registerListener(JpaCmpEngine.java:124)
>>>        at
>>> org.apache.openejb.core.cmp.jpa.JpaCmpEngine.getEntityManager(JpaCmpEngine.java:107)
>>>        at
>>> org.apache.openejb.core.cmp.jpa.JpaCmpEngine.createBean(JpaCmpEngine.java:136)
>>>        at
>>> org.apache.openejb.core.cmp.CmpContainer.createEJBObject(CmpContainer.java:605)
>>>        at
>>> org.apache.openejb.core.cmp.CmpContainer.invoke(CmpContainer.java:250)
>>>        at
>>> org.apache.openejb.core.ivm.EjbHomeProxyHandler.create(EjbHomeProxyHandler.java:267)
>>>        at
>>> org.apache.openejb.core.ivm.EjbHomeProxyHandler._invoke(EjbHomeProxyHandler.java:158)
>>>        at
>>> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:274)
>>>        at $Proxy33.create(Unknown Source)
>>>        at org.superbiz.cmp2.MoviesTest.test(MoviesTest.java:51)
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>        at
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>        at
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>        at java.lang.reflect.Method.invoke(Method.java:585)
>>>        at junit.framework.TestCase.runTest(TestCase.java:168)
>>>        at junit.framework.TestCase.runBare(TestCase.java:134)
>>>        at junit.framework.TestResult$1.protect(TestResult.java:110)
>>>        at junit.framework.TestResult.runProtected(TestResult.java:128)
>>>        at junit.framework.TestResult.run(TestResult.java:113)
>>>        at junit.framework.TestCase.run(TestCase.java:124)
>>>        at junit.framework.TestSuite.runTest(TestSuite.java:232)
>>>        at junit.framework.TestSuite.run(TestSuite.java:227)
>>>        at
>>> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
>>>        at
>>> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
>>>        at
>>> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:138)
>>>        at
>>> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:125)
>>>        at org.apache.maven.surefire.Surefire.run(Surefire.java:132)
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>        at
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>        at
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>        at java.lang.reflect.Method.invoke(Method.java:585)
>>>        at
>>> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:290)
>>>        at
>>> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:818)
>>> Caused by: java.io.IOException: org.xml.sax.SAXException:
>>> jar:file:/tmp/OpenEJB_Generated_49666.jar!/META-INF/openejb-cmp-generated-orm.xml
>>> [Location: Line: 36, C: 61]: The type of field
>>> "openejb.org.superbiz.cmp2.DirectorBean.movies" isn't supported by declared
>>> persistence strategy "OneToMany".  Please choose a different strategy.
>>>        at
>>> org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource(XMLMetaDataParser.java:379)
>>>        at
>>> org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:318)
>>>        at
>>> org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:295)
>>>        at
>>> org.apache.openjpa.lib.meta.XMLMetaDataParser.parse(XMLMetaDataParser.java:268)
>>>        at
>>> org.apache.openjpa.persistence.PersistenceMetaDataFactory.parseXML(PersistenceMetaDataFactory.java:247)
>>>        ... 50 more
>>> Caused by: org.xml.sax.SAXException:
>>> jar:file:/tmp/OpenEJB_Generated_49666.jar!/META-INF/openejb-cmp-generated-orm.xml
>>> [Location: Line: 36, C: 61]: The type of field
>>> "openejb.org.superbiz.cmp2.DirectorBean.movies" isn't supported by declared
>>> persistence strategy "OneToMany".  Please choose a different strategy.
>>>        at
>>> org.apache.openjpa.lib.meta.XMLMetaDataParser.getException(XMLMetaDataParser.java:665)
>>>        at
>>> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.assertPCCollection(XMLPersistenceMetaDataParser.java:1336)
>>>        at
>>> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.parseOneToMany(XMLPersistenceMetaDataParser.java:1348)
>>>        at
>>> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.parseStrategy(XMLPersistenceMetaDataParser.java:1245)
>>>        at
>>> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.startStrategy(XMLPersistenceMetaDataParser.java:1213)
>>>        at
>>> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.startClassElement(XMLPersistenceMetaDataParser.java:621)
>>>        at
>>> org.apache.openjpa.lib.meta.CFMetaDataParser.startElement(CFMetaDataParser.java:111)
>>>        at
>>> org.apache.openjpa.lib.meta.XMLMetaDataParser.startElement(XMLMetaDataParser.java:432)
>>>        at
>>> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:533)
>>>        at
>>> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:708)
>>>        at
>>> com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:330)
>>>        at
>>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
>>>        at
>>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
>>>        at
>>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
>>>        at
>>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
>>>        at
>>> com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
>>>        at
>>> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
>>>        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
>>>        at
>>> org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource(XMLMetaDataParser.java:376)
>>>        ... 54 more
>>>
>>>
>>
>>
>


-- 
Karan Singh Malhi

Reply via email to