Hi Andrus,
Here is what I'm working with:
<obj-relationship name="children" source="Location" target="Location"
deleteRule="Cascade" db-relationship-path="rel_children"/>
<obj-relationship name="parent" source="Location" target="Location"
db-relationship-path="rel_parent"/>
<db-relationship name="rel_children" source="IMV_locations"
target="IMV_locations" toMany="true">
<db-attribute-pair source="id" target="parent_id"/>
</db-relationship>
<db-relationship name="rel_parent" source="IMV_locations"
target="IMV_locations" toDependentPK="true" toMany="false">
<db-attribute-pair source="parent_id" target="id"/>
</db-relationship>
<obj-entity name="Location"
className="com.imvprojects.phoneList.data.Location"
dbEntityName="IMV_locations">
<obj-attribute name="_description" type="java.lang.String"
db-attribute-path="description"/>
</obj-entity>
<db-entity name="IMV_locations" schema="dbo" catalog="GPSForecast">
<db-attribute name="description" type="VARCHAR" length="75"/>
<db-attribute name="id" type="INTEGER" isPrimaryKey="true"
isMandatory="true" isGenerated="true" length="10"/>
<db-attribute name="parent_id" type="INTEGER" length="10"/>
</db-entity>
I'm not sure what you mean by flattened relationships?
Do you mean the fact that I am using only one table to
represent the relationship? Should I be breaking this out?
I have another relationship where I have a 1:n relationship
which I have represented in a seperate table (for reasons
which are not relevent to the discussion) and this class
has all of the appropriate accessors.
Thanks,
Filip
On 4/27/05, Andrus Adamchik <andru..bjectstyle.org> wrote:
> Doublecheck that you cleared those bogus flattened relationships.
>
> Read-only relationships are usually generated for all flattened
> relationships that Cayenne treats are non-updateable (i.e. all except m:n
> with a single join table). I suspect this is the cause of the problem.
>
> Andrus
>
>
> > I didn't notice this before but it appears cayenne
> > did not generate modifiers for the hierarchical class?
> >
> > What I mean is this:
> >
> > I HAVE:
> > Location getParent()
> > List getChildren();
> >
> > I am MISSING:
> > setParent(Location)
> > addToChildren(Location)
> > removeFromChildren(Location)
> >
> > I have checked to make sure I didn't inadvertantly
> > make the entity read-only. Any suggestions?
> >
> > Thanks,
> > Filip
> >
> >
> > On 4/25/05, Filip Balas <fbala..mail.com> wrote:
> >> Just a quick update so that no one wastes anymore
> >> time on this other than me. It appears that with the
> >> clean test, cayenne handles everything just fine.
> >>
> >> There must be something else in how I've used the
> >> modeler or set up the relationships in the database
> >> that is causing this to happen.
> >>
> >> Thanks for your input Andrus, just know that there is
> >> a test case for this was motivation enough to prove
> >> myself wrong.
> >>
> >> Cheers,
> >> Filip
> >>
> >>
> >> On 4/25/05, Filip Balas <fbala..mail.com> wrote:
> >> > Hmmm, okay I don't like to blame someone else's code
> >> > unless I'm 100% sure. Later today I will set up a purely
> >> > clean test (seperate table, seperate map, sperate test class). If
> >> this doesn't work I'll submit a bug...
> >> >
> >> > Thanks again,
> >> > Filip
> >> >
> >> > On 4/25/05, Andrus Adamchik <andru..bjectstyle.org> wrote:
> >> > > I am still dubious that this is Cayenne problem as we have test
> >> cases that cover this situation. So I recommend doublechecking
> >> that you don't have your old incorrect DataMap sitting somewhere
> >> in the classpath, and also check if it works with Cayenne 1.1.1
> >> (unless your code depends heavily on 1.2 API making this
> >> impossible).
> >> > >
> >> > > If it still doesn't work, please submit a bug report containing
> >> DataMap XML file and a code snippet that trigers this fetch.
> >> > >
> >> > > Andrus
> >> > >
> >> > >
> >> > > > I'm on the bleeding edge (could be why I'm having the
> >> > > > problem) cayenne 1.2M3.
> >> > > >
> >> > > > Filip
> >> > > >
> >> > > >
> >> > > > On 4/25/05, Andrus Adamchik <andru..bjectstyle.org> wrote:
> >> > > >> You shouldn't have to do anything special. Cayenne (including
> >> the Modeler) works fine with simple parent-child hierarchies.
> >> For "children" I expect the generated query to look even
> >> simpler:
> >> > > >>
> >> > > >> SELECT t0.description, t0.id, t0.parent_id
> >> > > >> FROM dbo.IMV_locations t0, dbo.IMV_locations t1
> >> > > >> WHERE t0.parent_id = ? [bind: 1]
> >> > > >>
> >> > > >> So ... What version of Cayenne do you have? There was a bug
> >> long time ago that messed it up, but I am fairly sure it is
> >> fixed in 1.1 final and 1.1.1 releases.
> >> > > >>
> >> > > >> Andrus
> >> > > >>
> >> > > >>
> >> > > >> > Hi Andrus,
> >> > > >> >
> >> > > >> > Yes that makes perfect sense. I didn't catch that error, I
> >> just
> >> > > >> assumed the modeler would generate the right xml when
> >> > > >> > I selected the proper source and target.
> >> > > >> >
> >> > > >> > However, even when I corrected the xml manually to your
> >> suggestion, I still have the following statement generated by
> >> cayenne:
> >> > > >> >
> >> > > >> > SELECT t0.description, t0.id, t0.parent_id
> >> > > >> > FROM dbo.IMV_locations t0, dbo.IMV_locations t1
> >> > > >> > WHERE t0.parent_id = t1.id AND (t1.parent_id = ?) [bind: 1]
> >> > > >> >
> >> > > >> > I need it to read:
> >> > > >> >
> >> > > >> > SELECT t0.description, t0.id, t0.parent_id
> >> > > >> > FROM dbo.IMV_locations t0, dbo.IMV_locations t1
> >> > > >> > WHERE t0.parent_id = t1.id AND (t1.id = ?) [bind: 1]
> >> > > >> >
> >> > > >> > In another spot in my code I have a hierarchy set up but it
> >> is a many to many (map, not tree) and cayenne seems
> >> > > >> > to deal with that beautifully. To achieve this I have an
> >> > > >> intermediate table that maps locations to one another. Will I
> >> have to add
> >> > > >> > this extra table with a one-To-one constraint to ensure a
> >> tree
> >> > > >> structure and not a map?
> >> > > >> >
> >> > > >> > Thanks to all who have answered.
> >> > > >> > Your help is greatly appreciated.
> >> > > >> > Filip
> >> > > >> >
> >> > > >> >
> >> > > >> >
> >> > > >> > On 4/24/05, Andrus Adamchik <andru..bjectstyle.org> wrote:
> >> > > >> >> Hi Filip,
> >> > > >> >>
> >> > > >> >> > <obj-relationship name="children" source="Location"
> >> > > >> >> target="Location" deleteRule="Cascade"
> >> > > >> >> > db-relationship-path="rel_children.rel_children"/>
> >> > > >> >> >
> >> > > >> >> > <obj-relationship name="parent" source="Location"
> >> > > >> target="Location"
> >> > > >> >> db-relationship-path="rel_parent.rel_parent"/>
> >> > > >> >>
> >> > > >> >> The way relationships above are mapped you'll be getting
> >> > > >> GRANDchildren and GRANDparents. Is this really what you want?
> >> The query you quote seems correct (for grandchildren). What I
> >> mean is that
> >> > > >> >>
> >> > > >> >>
> >> > > >> >> > SELECT t0.description, t0.id, t0.parent_id
> >> > > >> >> > FROM dbo.IMV_locations t0, dbo.IMV_locations t1
> >> > > >> >> > WHERE t0.parent_id = t1.id AND (t1.parent_id = ?) [bind:
> >> 1]
> >> > > >> >>
> >> > > >> >> is a short form for
> >> > > >> >>
> >> > > >> >> SELECT t0.description, t0.id, t0.parent_id
> >> > > >> >> FROM dbo.IMV_locations t0, dbo.IMV_locations t1,
> >> dbo.IMV_locations
> >> > > >> t2 WHERE t0.parent_id = t1.id AND t1.parent_id = t2.id AND
> >> t2.id > > > >> ? [bind: 1]
> >> > > >> >>
> >> > > >> >> (see an extra join)... If you need direct children, then you
> >> need
> >> > > >> to remove the last component in the obj-relationship path. The
> >> resulting mapping should look like this:
> >> > > >> >>
> >> > > >> >>
> >> > > >> >> <obj-relationship name="children" source="Location"
> >> > > >> target="Location" deleteRule="Cascade"
> >> > > >> >> db-relationship-path="rel_children"/>
> >> > > >> >>
> >> > > >> >> <obj-relationship name="parent" source="Location"
> >> target="Location"
> >> > > >> db-relationship-path="rel_parent"/>
> >> > > >> >>
> >> > > >> >> I hope I understood your requirements correctly...
> >> > > >> >>
> >> > > >> >> Andrus
> >> > > >> >>
> >> > > >> >>
> >> > > >> >
> >> > > >> >
> >> > > >> > --
> >> > > >> > Cell : 403.461.7895
> >> > > >> > Work: 403.770.1534
> >> > > >> > MSN: fbala..otmail.com
> >> > > >>
> >> > > >>
> >> > > >
> >> > > >
> >> > > > --
> >> > > > Cell : 403.461.7895
> >> > > > Work: 403.770.1534
> >> > > > MSN: fbala..otmail.com
> >> > >
> >> > >
> >> >
> >> > --
> >> > Cell : 403.461.7895
> >> > Work: 403.770.1534
> >> > MSN: fbala..otmail.com
> >> >
> >>
> >> --
> >> Cell : 403.461.7895
> >> Work: 403.770.1534
> >> MSN: fbala..otmail.com
> >>
> >
> >
> > --
> > Cell : 403.461.7895
> > Work: 403.770.1534
> > MSN: fbala..otmail.com
>
>
-- Cell : 403.461.7895 Work: 403.770.1534 MSN: fbala..otmail.com
This archive was generated by hypermail 2.0.0 : Wed Apr 27 2005 - 18:44:28 EDT