Davor,
In your mapping, you'll need to set up Language with
depends=ManufacturerInfo and ManufacturerInfo with depends=Manufacturer. You
also need to make the relationships bidirectional - so within the set/add
methods for the ManufacturerInfos within Manufacturer, be sure and also set
the manufacturer into the ManufacturerInfo (ditto for the set/add Languages
within ManufacturerInfo)...

Hope this helps...

Margaret Martin

-----Original Message-----
From: Davor Cengija [mailto:[EMAIL PROTECTED]]
Sent: Friday, March 08, 2002 1:46 PM
To: [EMAIL PROTECTED]
Subject: [castor-dev] Creating object hierarchy


        Is it possible to persist an object as well as all of its
        childs in a single db.create(obj)? I'm not able to produce a
        mapping for that.

        This is my situation:

public Manufacturer {
  String manufacturerId;
  String manufacturerName;
  ArrayList manufacturerInfo;
  // getters, setters, empty constructor
}
public ManufacturerInfo {
  String manufacturerInfoId;
  Manufacturer manufacturer;
  Language language;
  String info;
  // getters, setters, empty constructor
}
public class Language {
  String languageId;
  String code;
  // getters, setters, empty constructor
}

        When loading Manufacturer by its ID, the complete hierarchy is
        created, with appropriate manufacturerInfo arraylist, which
        contains ManufacturerInfo object for related languages.

        But when trying to db.create(manufacturer), only manufacturer
        table is populated, there's no related rows in
        manufacturer_info table.

The client:

Manufacturer manufacturer = new ManufacturerImpl();
manufacturer.setName("some name");

// prepare ArrayList which will contain infos
ArrayList infoList = new ArrayList();

// obtain langauge!
Language lang = new Language("en");

ManufacturerInfo info = new ManufacturerInfoImpl();
info.setLanguage(lang);
info.setInfo("This is an info");
infoList.add(info);
// same for other langauges
// ....
manufacturer.setManufacturerInfo(infoList);

// now try to write it
db.create(manufacturer);

// manufacturer is created but  infos aren't.

        My mapping file looks like this:

<mapping>

    <class name="LanguageImpl"
    identity="languageId" key-generator="UUID">
        <map-to table="language" xml="Language"/>
        <field name="languageId" type="string">
            <sql name="language_id" type="char"/>
            <bind-xml node="attribute"/>
        </field>
        <field name="code" type="string">
            <sql name="code" type="char"/>
            <bind-xml node="attribute"/>
        </field>
    </class>

    <class name="ManufacturerInfoImpl"
     identity="manufacturerInfoId" key-generator="CUUID">
        <map-to table="manufacturer_info" xml="ManufacturerInfo"/>
        <field name="manufacturerInfoId" type="string">
            <sql name="manufacturer_info_id" type="char"/>
            <bind-xml node="attribute"/>
        </field>
        <field name="manufacturer"
        type="net.zuckerfrei.jobst.data.ManufacturerImpl">
            <sql name="manufacturer_id"/>
            <xml name="manufacturer" node="element"/>
        </field>
        <field name="info" type="string">
            <sql name="info" type="char"/>
            <bind-xml node="element" name="Info"/>
        </field>
        <field name="language"
        type="net.zuckerfrei.jobst.data.LanguageImpl">
            <sql name="language_id"/>
            <bind-xml node="element"/>
        </field>
    </class>

    <class name="ManufacturerImpl"
    identity="manufacturerId" key-generator="UUID">
        <map-to table="manufacturer" xml="Manufacturer"/>
        <field name="manufacturerId" type="string">
            <sql name="manufacturer_id" type="char"/>
            <bind-xml node="attribute"/>
        </field>
        <field name="manufacturerName" type="string">
            <sql name="manufacturer_name" type="char"/>
            <bind-xml node="element" name="ManufacturerName"/>
        </field>
        <field name="manufacturerInfo"
         type="ManufacturerInfoImpl"
         required="true" collection="arraylist">
            <sql many-key="manufacturer_id"/>
            <bind-xml name="ManufacturerInfo" node="element"/>
        </field>
    </class>

</mapping>

        (The sample code shown here is a part of a larger mapping
        file, and java code above is also truncated; irrelevant parts
        are omitted).

        What am I doing wrong here? Is it even possible to persist
        newly created object with its complete hierarchy?

        Thanks
-- 
Davor Cengija
[EMAIL PROTECTED]

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

Reply via email to