Castor XML doesn't know anything about Castor JDO dependant objects.
I had a bit of trouble following your example with all the foo5/bar5
stuff, but I think
you'll need to define the "foreign key" as a reference in the XML
binding. And currently it can only be an attribute node...
<!--foreign key field from foo5.Foo5.bar5s field-->
<field name="foo5" type="foo5.Foo5">
- <xml name="foo5FK" node="element" />
<sql name="foo5_id" />
</field>
<!--foreign key field from foo5.Foo5.bar5s field-->
<field name="foo5" type="foo5.Foo5">
+ <xml name="foo5FK" node="attribute" reference="true"/>
<sql name="foo5_id" />
</field>
I think that will do the trick for you.
--Keith
"Davis, Richard" wrote:
>
> Hi,
>
> Summary of problem: When I unmarshal a master object and its dependent
> objects from previously marshalled XML, the dependent objects' properties
> (Foreign Keys) that are of the parent's data type are not loaded and remain
> null.
>
> Full description: I have an object model where: The Foo5 object has a
> property bar5s which is a Vector collection of Bar5 objects. The Bar5
> objects are dependent on the Foo5 object as specified in the mapping. The
> Bar5 object has a field foo5 of type Foo5 which is the foreign key field in
> Bar5.
>
> Everything works fine when I create a Foo5, create a couple of Bar5s, add
> the Bar5s to the Foo5 and call db.create(foo5) in a transaction. Also, when
> I load a Foo5 from the database via JDO the object is populated correctly.
> All Bar5s in the bar5s Vector are correctly populated as well.
>
> The problem arises when I marshal a Foo5 to file and then unmarshal. The
> marshalled output contains the Foo5 information and elements that represent
> each Bar5 that is dependent on the Foo5. However, there is no foreign key
> information represented in the Bar5 element data that has been marshalled
> even though the mapping file contains an <xml...> element for this field.
> (btw, I specify the mapping file to a mashaller before calling the marshal
> method)
>
> Now the problem --- When I unmarshal a Foo5 object, all properties load
> correctly including the Vector collection of Bar5s. EXCEPT that the Bar5
> objects have a NULL value for their foo5 property. This is problemmatic
> because when I want to update the unmarshalled object, the update fails
> because the NULL property resolves to a NULL value for the foreign key
> column in the Bar5 database table.
>
> Any help is appreciated. XSD and mapping below.
>
> <?xml version="1.0"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
> targetNamespace="http://www.zzz.com/castor/schemas/test/types"
> xmlns="http://www.zzz.com/castor/schemas/test/types"
> xmlns:ext="http://www.zzz.com/castor/schemas/test/externalTypes" >
>
> <xsd:import
> namespace="http://www.zzz.com/castor/schemas/test/externalTypes"
> schemaLocation="ExternalDataTypes.xsd" />
>
> <xsd:element name="foo5">
> <xsd:annotation>
> <xsd:documentation>A simple representation of a foo5
> object</xsd:documentation>
> </xsd:annotation>
>
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="name" type="xsd:string" />
> <xsd:element name="date" type="xsd:dateTime" />
> <xsd:element name="bar5s" type="ext:Bar5"
> maxOccurs="unbounded" />
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
>
> <xsd:element name="bar5">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="name" type="xsd:string" />
> <xsd:element name="date" type="xsd:dateTime" />
> <xsd:element name="foo5" type="ext:Foo5" />
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> </xsd:schema>
>
> <!DOCTYPE databases PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
> "http://castor.exolab.org/mapping.dtd">
> <mapping>
>
> <!-- Mapping for Foo5-->
> <class name="foo5.Foo5" identity="id.id">
> <description>Foo5 object</description>
> <map-to table="foo5" xml="foo5" />
>
> <field name="id.id" type="string">
> <sql name="id" type="char"/>
> <xml name="idField" node="attribute"/>
> </field>
>
> <field name="name" type="string">
> <sql name="name" type="char"/>
> <xml node="element"/>
> </field>
>
> <field name="date" type="date">
> <sql name="date" type="date"/>
> <xml node="element" />
> </field>
>
> <!--foo5 has a 1:many reference to Bar5-->
> <field name="bar5s" type="foo5.Bar5" required="true"
> collection="vector" set-method="setBar5sVector"
> get-method="getBar5sVector">
> <sql many-key="foo5_id" />
> <xml name="bar5s" node="element" />
> </field>
> </class>
>
> <class name="foo5.Bar5" identity="id.id" depends="foo5.Foo5">
> <map-to table="bar5" xml="bar5" />
>
> <field name="id.id" type="string">
> <sql name="id" type="char" />
> <xml name="id" node="attribute"/>
> </field>
>
> <field name="name" type="string">
> <sql name="name" type="char"/>
> <xml node="element" />
> </field>
>
> <field name="date" type="date">
> <sql name="date" type="date"/>
> <xml node="element" />
> </field>
>
> <!--foreign key field from foo5.Foo5.bar5s field-->
> <field name="foo5" type="foo5.Foo5">
> <xml name="foo5FK" node="element" />
> <sql name="foo5_id" />
> </field>
> </class>
>
> </mapping>
>
> Richard Davis
>
> -----------------------------------------------------------
> 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