Hi Michael,

I'm not a hibernate developer so I can only give you my opinion. But
from my point of view the functionality you are asking for doesn't
make any sense. "Sequence" is the parent in this relationship, and
shouldn't ever be automatically deleted just because it has no
children.

regards,
Jordan.


On May 2, 10:53 am, Michael Charalambous
<[email protected]> wrote:
> Hi Jordan
>
> Thank you for you response, however I would also really like to know the
> logic behind not supporting this functionality and what is the recommended
> work-around for it.
>
> I have quite a bit of googling on this issue and haven't found any
> information on why NHibernate behaves this way, just that it does. I really
> like to understand why things work a particular way so I really want an
> explanation of why it behaves this way.
>
> Thanks
> Michael
>
>
>
>
>
>
>
> On Tuesday, 1 May 2012 17:44:38 UTC+1, Jordan wrote:
>
> > Sorry Michael, my bad, I didn't read your post properly at all.
>
> > I believe, as you suggest, that this behaviour only works when the
> > parent object is deleted, hence the all-delete-orphan option is only
> > available that way round.
>
> > regards,
> > Jordan
>
> > On May 1, 5:00 pm, Michael Charalambous
> > <[email protected]> wrote:
> > > Hi Jordan
>
> > > Thank you for you response. I have tried this and it does not fix the
> > > issue. From the docs the only valid cascade options for many-to-one are
>
> > > cascade="all|none|save-update|delete"
>
> > > Thanks
>
> > > Michael
>
> > > On Tuesday, 1 May 2012 16:32:04 UTC+1, Jordan wrote:
>
> > > > Hi Michael,
>
> > > > I believe you need to do:
>
> > > > <many-to-one name ="sequence" cascade="all-delete-orphan" />
>
> > > > regards,
> > > > Jordan.
>
> > > > On May 1, 3:05 pm, Michael Charalambous
> > > > <[email protected]> wrote:
> > > > > Hi
> > > > > I am confused about how NHibernate treats orphan objects and would
> > like
> > > > > some clarification on this subject. Please see below for my simple
> > test
> > > > > case. When I run this test case I expect the child object "sequence"
> > to
> > > > be
> > > > > deleted from the DB but this isn't the case, instead I am left with
> > an
> > > > > orphan object. The documentation on many-to-one,
> > > >http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-manyt...,
>
> > > > > states that the cascade option:
>
> > > > >      "Specifies which operations should be cascaded from the parent
> > > > object
> > > > > to the associated object"
>
> > > > > To be honest, I'm not sure if this means that my delete scenario is
> > > > > supported or if the cascade option only comes into play when the
> > parent
> > > > > object is deleted.
>
> > > > > So to summarise my questions are:
>
> > > > >    1. Does NHibernate support many-to-one deletes as in the unit
> > test,
> > > > and
> > > > >    if so what is wrong with my test case.
> > > > >    2. If NHibernate does not support this scenario what is the logic
> > > > behind
> > > > >    not supporting it.
> > > > >    3. If NHibernate does not support this scenario is there a work
> > > > around
> > > > >    so child objects can be deleted by their parents from within the
> > > > domain
> > > > >    model and be deleted within the DB.
>
> > > > > Thanks in advance
>
> > > > > Michael
>
> > > > > NB. I have also tried using one-to-one and described by Ayende (
> > > >http://ayende.com/blog/3960/nhibernate-mapping-one-to-one) with the
> > same
> > > > > results.
>
> > > > > --------------------------------Class
> > > > > declarations---------------------------------------------
>
> > > > > public class Host
> > > > > {
> > > > >     public virtual int id { get; set; }
> > > > >     public virtual Sequence sequence { get; set; }
>
> > > > > }
>
> > > > > public class Sequence
> > > > > {
> > > > >     public virtual int id { get; set; }
>
> > > > > }
>
> > > > > --------------------------------XML
> > > > > declarations---------------------------------------------
>
> > > > > <class name="Host">
> > > > >     <id name="id">
> > > > >         <generator class="native" />
> > > > >     </id>
> > > > >     <many-to-one name ="sequence" cascade="all" />
> > > > > </class>
>
> > > > > <class name="Sequence">
> > > > >     <id name="id">
> > > > >         <generator class="native" />
> > > > >     </id>
> > > > > </class>
>
> > > > > --------------------------------Unit
> > > > > Test---------------------------------------------
>
> > > > > [TestFixture]
> > > > > public class Fixture : BugTestCase
> > > > > {
> > > > >     [Test]
> > > > >     public void CanDeleteChild()
> > > > >     {
> > > > >         Host host = new Host();
> > > > >         Sequence sequence = new Sequence(); ;
> > > > >         host.sequence = sequence;
>
> > > > >         using (var s = OpenSession())
> > > > >         {
> > > > >             using (s.BeginTransaction())
> > > > >             {
> > > > >                 s.SaveOrUpdate(host);
> > > > >                 s.Transaction.Commit();
> > > > >             }
> > > > >             s.Close();
> > > > >         }
>
> > > > >         int sequence_id = sequence.id;
>
> > > > >         using (var s = OpenSession())
> > > > >         {
> > > > >             using (s.BeginTransaction())
> > > > >             {
> > > > >                 sequence.host = null;
> > > > >                 sequence = null;
> > > > >                 host.sequence = null;
>
> > > > >                 s.SaveOrUpdate(host);
> > > > >                 s.Transaction.Commit();
> > > > >             }
> > > > >             s.Close();
> > > > >         }
>
> > > > >         using (var s = OpenSession())
> > > > >         {
> > > > >             Assert.IsNull(s.Get<Sequence>(sequence_id));
> > > > >             sessions.Close();
> > > > >         }
> > > > >     }
>
> > > > > }

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to