Stephen,

we'd be more than happy to provide you with some help when it comes down
to your personal learning experience. What do you need ?

To, for example, model a 1:M relation from A to B, in A you'll need a
property named 'bs' of type e.g. List, and in the mapping file a field
mapping similar to

<field name="bs" type="some.domain.B" collection="arraylist">
        <sql many-key=" ..." />
</field>

And in terms of the SQL statements to create A and B, one could use the
following statements as a starting point:

create table domain_a (
  id int not null PRIMARY KEY,
  name varchar(20)
);

create table domain_B 8
  id int not null PRIMARY KEY,
  descr varchar(20),
  a_id int
);

I hope this keeps you going ... ;-).

Werner

Stephen Bash wrote:
> Well gentlemen, since I've wanted to learn more about the JDO world
> for a while now, I took this as a chance to read up more on Castor
> JDO.  And honestly, most of it makes sense though I have very little
> experience with O/R mapping.  Unfortunately, when it comes to actually
> creating the database schema or correctly modeling the 1:m relations,
> I'm out of my league, so I'm probably going to have to leave this one
> for someone else.
> 
> Thanks,
> Stephen
> 
> On 2/13/06, Ralf Joachim <[EMAIL PROTECTED]> wrote:
>> Hi Andrew, Hi Stephen,
>>
>> according to my knowledge hibernate returns cglib-proxies instead of the
>> original ones as they havily us lazy loading of data from database. In
>> the past a few users had problems with the constelation castor xml
>> together with hibernate according to this cglib-proxies.
>>
>> Just in case you are not aware of it
>> Ralf
>>
>>
>> Stephen Bash schrieb:
>>> Andrew-
>>>
>>> So I tried to recreate your problem with a simpler set of classes:
>>>
>>>    public class ParentFoo {
>>>       protected int parentId;
>>>       protected Set children;
>>>
>>>       public int getParentId() { return parentId; }
>>>       public void setParentId( int parentId ) { this.parentId = parentId; }
>>>
>>>       public Set getChildren() { return children; }
>>>       public void setChildren( Set children ) { this.children = children; }
>>>    }
>>>
>>>    public class ChildFoo {
>>>       protected int childId;
>>>       protected Set parents;
>>>
>>>       public int getChildId() { return childId; }
>>>       public void setChildId( int childId ) { this.childId = childId; }
>>>
>>>       public Set getParents() { return parents; }
>>>       public void setParents( Set parents ) { this.parents = parents; }
>>>
>>>       public String toString() { return( String.valueOf( childId ) ); }
>>>    }
>>>
>>> And the following mapping file:
>>>
>>>    <mapping>
>>>       <class name="ParentFoo">
>>>          <map-to xml="parent-foo" />
>>>
>>>          <field name="parentId" type="integer">
>>>             <bind-xml name="id" node="attribute" />
>>>          </field>
>>>
>>>           <field name="children" collection="set" type="ChildFoo">
>>>              <bind-xml name="child" />
>>>           </field>
>>>       </class>
>>>
>>>       <class name="ChildFoo">
>>>          <map-to xml="child-foo" />
>>>
>>>          <field name="childId" type="integer">
>>>             <bind-xml name="id" node="attribute" />
>>>          </field>
>>>
>>> <!--
>>>          <field name="parents" collection="set"
>>> type="castor.mason.one.ParentFoo">
>>>             <bind-xml name="parent" />
>>>          </field>
>>>  -->
>>>       </class>
>>>    </mapping>
>>>
>>> I've attempted to recreate the 1:m m:1 relationship you had.  You can
>>> see in my mapping file I have the connection between the children and
>>> the parents commented out.  I then created a series of parents and
>>> children, mixing and matching them.  Using this mapping file as is to
>>> marshal my first parent object I get:
>>>
>>>    <parent-foo id="1">
>>>        <child id="5"/>
>>>        <child id="4"/>
>>>    </parent-foo>
>>>
>>> If I uncomment the child->parent relationship, I get:
>>>
>>>    <parent-foo id="1">
>>>        <child id="5">
>>>            <parent id="2">
>>>                <child id="6">
>>>                    <parent id="3"/>
>>>                </child>
>>>                <child id="4"/>
>>>            </parent>
>>>        </child>
>>>        <child id="4">
>>>            <parent id="2">
>>>                <child id="6">
>>>                    <parent id="3"/>
>>>                </child>
>>>                <child id="5"/>
>>>            </parent>
>>>        </child>
>>>    </parent-foo>
>>>
>>> I'm somewhat surprised to find that I'm not getting the deep recursion
>>> you mention.  I tested this with Castor 0.9.9 and 1.0M2.  What version
>>> of Castor are you running?  If you can run this example on your system
>>> and agree or disagree with the output, that would also be helpful.
>>>
>>> Do you see anything grossly different between your setup and mine?  I
>>> don't have the intermediate classes, so that might change things, but
>>> I wanted to start simple.
>>>
>>> Let me know your thoughts on this example and its comparison to your
>>> code.  I can't directly answer your question because from what I can
>>> tell, you're doing what I'm doing...
>>>
>>> Stephen
>>>
>>>
>>> On 2/13/06, Andrew Mason <[EMAIL PROTECTED]> wrote:
>>>
>>>> OK,
>>>>
>>>> Here is the castor mapping file:
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version
>>>> 1.0//EN"
>>>>                                 "http://castor.org/mapping.dtd";>
>>>> <mapping>
>>>> <class name="uk.gov.forestry.harpps.model.Species" auto-complete="false">
>>>> <map-to xml="species"/>
>>>> <field name="scientificName">
>>>> <bind-xml name="scientific-name" node="attribute"/>
>>>> </field>
>>>> <field name="protections"  collection="set"
>>>> type="uk.gov.forestry.harpps.model.Protection">
>>>> </field>
>>>> </class>
>>>>
>>>> <class name="uk.gov.forestry.harpps.model.Protection"
>>>> auto-complete="false">
>>>> <map-to xml="protection"/>
>>>> <field name="lookupProtection"
>>>> type="uk.gov.forestry.harpps.model.LookupProtection">
>>>> <bind-xml name="lookup-protection" node="element"/>
>>>> </field>
>>>> </class>
>>>>
>>>> <class name="uk.gov.forestry.harpps.model.LookupProtection"
>>>> auto-complete="false">
>>>> <map-to xml="protection-lookup"/>
>>>> <field name="protectionName">
>>>> <bind-xml name="protection-name" node="attribute"/>
>>>> </field>
>>>> <field name="lookupProtectionType"
>>>> type="uk.gov.forestry.harpps.model.LookupProtectionType">
>>>> <bind-xml name="protection-type" node="element"/>
>>>> </field>
>>>> </class>
>>>>
>>>> <class name="uk.gov.forestry.harpps.model.LookupProtectionType"
>>>> auto-complete="false">
>>>> <map-to xml="protection-type"/>
>>>> <field name="protectionTypeId">
>>>> <bind-xml name="protection-type-id" node="attribute"/>
>>>> </field>
>>>> </class>
>>>> </mapping>
>>>>
>>>> A Species has a Hashset of Protection objects. It also has many other
>>>> Objects associated with it in a similar way, but I'm not interested in
>>>> generating the XML for those (yet).
>>>>
>>>> A Protection has a LookupProtection object, and a protectionName String.
>>>>
>>>> A LookupProtection object has a LookupProtectionType object.
>>>>
>>>> A LookupProtectionType has a protectionTypeId (long)
>>>>
>>>> Below is the java code of the LookupProtectionType class, you will see
>>>> it has a relationship back to the LookupProtection object, but I don't
>>>> want to show this within the XML. Most of the Objects also have similar
>>>> 2 way relationships.
>>>>
>>>> public class LookupProtectionType  implements java.io.Serializable {
>>>>
>>>>
>>>>    // Fields
>>>>
>>>>     private long protectionTypeId;
>>>>     private String protectionType;
>>>>     private Set lookupProtections = new HashSet(0);
>>>>
>>>>
>>>>    // Constructors
>>>>
>>>>    /** default constructor */
>>>>    public LookupProtectionType() {
>>>>    }
>>>>
>>>>    /** minimal constructor */
>>>>    public LookupProtectionType(long protectionTypeId) {
>>>>        this.protectionTypeId = protectionTypeId;
>>>>    }
>>>>
>>>>    /** full constructor */
>>>>    public LookupProtectionType(long protectionTypeId, String
>>>> protectionType, Set lookupProtections) {
>>>>        this.protectionTypeId = protectionTypeId;
>>>>        this.protectionType = protectionType;
>>>>        this.lookupProtections = lookupProtections;
>>>>    }
>>>>
>>>>
>>>>
>>>>    // Property accessors
>>>>
>>>>    public long getProtectionTypeId() {
>>>>        return this.protectionTypeId;
>>>>    }
>>>>
>>>>    public void setProtectionTypeId(long protectionTypeId) {
>>>>        this.protectionTypeId = protectionTypeId;
>>>>    }
>>>>
>>>>    public String getProtectionType() {
>>>>        return this.protectionType;
>>>>    }
>>>>
>>>>    public void setProtectionType(String protectionType) {
>>>>        this.protectionType = protectionType;
>>>>    }
>>>>
>>>>    public Set getLookupProtections() {
>>>>        return this.lookupProtections;
>>>>    }
>>>>
>>>>    public void setLookupProtections(Set lookupProtections) {
>>>>        this.lookupProtections = lookupProtections;
>>>>    }
>>>>
>>>>
>>>> }
>>>>
>>>>
>>>> Within the Hibernate mapping I made all the relationships Lazy, so they
>>>> should only load when their get method is called.
>>>>
>>>> When I test the marshalling, I can see all the Non-mapped objects being
>>>> queried from the database.
>>>> I have tried mapping all the fields and setting them as Trasient, but
>>>> that seemed to have no effect.
>>>>
>>>>
>>>>
>>>>
>>>> Werner Guttmann wrote:
>>>>
>>>>
>>>>> Andrew,
>>>>>
>>>>> Can you please show us the relevant mapping file section you are using
>>>>> to 'disable' some of the relations ?
>>>>>
>>>>> Thanks
>>>>> Werner
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Andrew Mason [mailto:[EMAIL PROTECTED]
>>>>>> Sent: Montag, 13. Februar 2006 11:56
>>>>>> To: [email protected]
>>>>>> Subject: [castor-user] Castor marshalling Hibernate Pojos
>>>>>>
>>>>>> Hello,
>>>>>> I apologise if this topic has been covered before - if so a
>>>>>> pointer to the relevent posts will be appreciated.
>>>>>>
>>>>>> I am using Hibernate as my object persistence layer (sorry
>>>>>> but I can't use Castor JDO due to political reasons).
>>>>>>
>>>>>> I wish to use Castor XML to marshall the pojos into xml documents.
>>>>>> Many of the objects have relationships with objects that are
>>>>>> required from a database perspective, but are not required
>>>>>> within the XML.
>>>>>> For example
>>>>>>
>>>>>> Species has a one-to-many relationship with Predator.
>>>>>> Predator has a one-to-many relationship with Species.
>>>>>>
>>>>>> When I marshal a Species object I want to include it's
>>>>>> predators, however, I do not want to include all the Species
>>>>>> the predator preys upon within the Species XML document.
>>>>>>
>>>>>> I assumed that by writing a mapping document for Predator,
>>>>>> that did not include rerlationship with Species, Castor would
>>>>>> not bother calling the getPreySpecies method.
>>>>>> What I am finding is that despite the mapping not including
>>>>>> this relationship, the method is still being called, causing
>>>>>> more species to be instantiated, thus causing more predators
>>>>>> to be instantiated and so on until my machine runs out of memory!
>>>>>>
>>>>>> Is there any way of ensuring that the Marshaller pays strict
>>>>>> attention to the Map, and doesn't call methods that are not defined?
>>>>>>
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>>> --
>>>>>> *************************************************
>>>>>> Andrew Mason
>>>>>> Environ-IT Ltd.
>>>>>> Tel.: 01899 880200
>>>>>> Mob.: 07919 967494
>>>>>> E-mail: [EMAIL PROTECTED]
>>>>>> *************************************************
>>>>>>
>>>>>>
>>>>>>
>>>>>> -------------------------------------------------
>>>>>> If you wish to unsubscribe from this list, please
>>>>>> send an empty message to the following address:
>>>>>>
>>>>>> [EMAIL PROTECTED]
>>>>>> -------------------------------------------------
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> -------------------------------------------------
>>>>> If you wish to unsubscribe from this list, please
>>>>> send an empty message to the following address:
>>>>>
>>>>> [EMAIL PROTECTED]
>>>>> -------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>> --
>>>> *************************************************
>>>> Andrew Mason
>>>> Environ-IT Ltd.
>>>> Tel.: 01899 880200
>>>> Mob.: 07919 967494
>>>> E-mail: [EMAIL PROTECTED]
>>>> *************************************************
>>>>
>>>>
>>>>
>>>> -------------------------------------------------
>>>> If you wish to unsubscribe from this list, please
>>>> send an empty message to the following address:
>>>>
>>>> [EMAIL PROTECTED]
>>>> -------------------------------------------------
>>>>
>>>>
>>>
>> -------------------------------------------------
>> If you wish to unsubscribe from this list, please
>> send an empty message to the following address:
>>
>> [EMAIL PROTECTED]
>> -------------------------------------------------
>>
>>


-------------------------------------------------
If you wish to unsubscribe from this list, please 
send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------

Reply via email to