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 view this discussion on the web visit https://groups.google.com/d/msg/nhusers/-/72iffKkJ9_MJ. 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.
