Neil,
You'll need to add additional setters/getters that utilize either another
collection type for the collection (ArrayList or Vector). Then change the
mapping to something like:
<class name="com.novobase.castor.Atoms" identity="id"
depends="com.novobase.castor.Minimol" key-generator="MAX">
<description>Atoms</description>
<map-to table="atoms"/>
<field name="id">
<sql name="id"/>
</field>
<field name="atom" type="com.novobase.castor.Atom"
collection="ArrayList" set-method="getAtomsList" get-method="getAtomsList">
<sql many-key="parentId"/>
</field>
</class>
HTH -
Margaret
-----Original Message-----
From: Neil Blue [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, November 19, 2002 4:16 AM
To: [EMAIL PROTECTED]
Subject: [castor-dev] How do I define an array collection for JDO?
Hello,
I am using Castor to unmarshall and store XML files. I have managed this for
a subset of elements from my schema so far. However I have come across a
problem trying to store collections of objects.
Here is an extract from my schema:
<xs:complexType name="atomsType">
<xs:sequence>
<xs:element name="atom" type="atomType"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:integer"/>
</xs:complexType>
This creates an 'AtomsType' class with 'Atom[] getAtom()' and
'setAtom(Atom[])' methods.
This works fine till I try to store this array. Here is my mapping.xml
entry:
<class name="com.novobase.castor.Atoms" identity="id"
depends="com.novobase.castor.Minimol" key-generator="MAX">
<description>Atoms</description>
<map-to table="atoms"/>
<field name="id">
<sql name="id"/>
</field>
<field name="atom" type="com.novobase.castor.Atom"
collection="array">
<sql many-key="parentId"/>
</field>
</class>
But the error I get when I go to store the object is:
[junit] Testcase: testJDO took 1.035 sec
[junit] Caused an ERROR
[junit] The return type for method public com.novobase.castor.Atom[]
com.novobase.castor.AtomsType.getAtom() does not match the declared field
type [Ljava.lang.Object;
[junit] org.exolab.castor.mapping.MappingException: The return type for
method public com.novobase.castor.Atom[]
com.novobase.castor.AtomsType.getAtom() does not match the declared field
type [Ljava.lang.Object;
[junit] at
org.exolab.castor.persist.FieldMolder.findAccessor(Unknown Source)
Please could anyone tell me if my mapping is wrong or if there is a better
way to do this.
Thank you
Neil
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev