Re: Delete cascade problem

From: Cris Daniluk (cris.danilu..mail.com)
Date: Fri Sep 16 2005 - 13:32:02 EDT

  • Next message: Filip Balas: "Re: This noise has to stop..."

    Now I'm really confused... what the hell is C? :)

    Are you using a join table? If so, are you using flattened
    relationships? Please describe the problem in detail. I think what you
    want to accomplish is perfectly doable, but its hard to tell with what
    you've given.

    On 9/16/05, Gili <cowwo..bs.darktech.org> wrote:
    >
    > I'm setting DENY in the modeler. What I am trying to communicate to
    > Cayenne is that it is all right to delete(Master) -- this should trigger
    > the deletion of all children -- but it is not alright to delete(Child).
    >
    > If I have:
    >
    > - A -> B -> C (cascading delete)
    > - C is set to DENY if any instances of A are referencing it
    > - User deletes A
    >
    > then I expect it to work because A is saying "I'll delete my reference
    > to C if it'll let me delete it" and that should be quite all right.
    >
    > Gili
    >
    > Cris Daniluk wrote:
    > > On 9/15/05, Gili <cowwo..bs.darktech.org> wrote:
    > >
    > >>Hi,
    > >>
    > >> I've got this relationship:
    > >>
    > >>On delete of A, cascade to B
    > >>On delete of B, if any "A" instances exist, DENY
    > >>
    > >> What I'm seeing at runtime is that I delete A, it tries to cascade to B
    > >>but this fails because A is still associated with it. Cayenne doesn't
    > >>seem to be smart enough to notice this is ok because A is the one
    > >>triggering the delete in the first place. Here are the logs I get at
    > >>runtime (I added these to the code):
    > >
    > >
    > > When you say DENY, are you referring to how you have it set up in the
    > > Modeler, or in the database? Are you sure you don't mean to have "No
    > > action"?
    > >
    > > If you use a master/child relationship, it sounds like you're doing:
    > >
    > > delete(Master) => delete(Children)
    > >
    > > delete(Child) => deny
    > >
    > > But that doesn't make a whole lot of sense... alternatively, you might be doing:
    > >
    > > delete(Child) => delete(Master)
    > >
    > > delete(Master) => deny if children
    > >
    > > Again, not making a whole lot of sense to me. I am probably not quite
    > > getting what you're trying to do here, but it sounds like Cayenne is
    > > doing the right thing. You generally want to pair a cascade and no
    > > action, not a cascade and deny.
    > >
    > > Cris
    > >
    >
    > --
    > http://www.desktopbeautifier.com/
    >



    This archive was generated by hypermail 2.0.0 : Fri Sep 16 2005 - 13:32:05 EDT