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