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
This archive was generated by hypermail 2.0.0 : Mon Apr 25 2005 - 16:26:20 EDT