The JIRA ticket was closed http://fabiomaulo.blogspot.com/2009/09/nhibernate-tree-re-parenting.html
2009/9/11 Paladin_za <[email protected]> > > This is exactly what the domain model is doing. > > The unit tests I attached to the JIRA issue demonstrates this. > > Hence why the issue is raised in the first place. > > On Sep 11, 4:40 pm, reflection <[email protected]> wrote: > > If I've read anything about cascading, people ALWAYS stated that if > > you use cascading you should also make the connection in your domain > > modell bi-directionwal. And if you do make your Domain Modell bi- > > directional this problem shouldn't occur. > > > > So if you do: > > parent.Add(child) > > > > You should also do: > > child.Parent = parent; > > > > and if you remove: > > parent.Remove(child); > > child.Parent = null; > > > > Now it is obvious what happens if you move a child: > > > > parent.Remove(child); > > child.Parent = null; > > > > otherParent.Add(child); > > child.Parent = otherParent; > > > > On Sep 11, 3:11 pm, Markus Zywitza <[email protected]> wrote: > > > > > If you had a transient object model with a bidirectional > > > parent-child-relationship, could you reparent your child by only > setting > > > child.Parent = newParent? > > > > > Probably not. You had to ensure within the setter, that the old and new > > > parent's references get updated, too. If you do this, you can simply > use > > > cascade=all-delete-orphan and all goes as expected. > > > Don't try to think relational, when you want persistence ignorance. > > > > > -Markus > > > 2009/9/10 Paladin_za <[email protected]> > > > > > > I think NHibernate is a great ORM, but I can't help but feel that in > > > > some cases the product forces me to manage persistence issues it > could > > > > have dealt with itself. > > > > > > My biggest gripe at the moment is the case of re-parenting. > > > > > > For example, I have a parent object with a collection of child > objects > > > > and I want to move one of the existing child objects to a different > > > > parent object. > > > > > > From a SQL perspective this could be done with the simple update > > > > statement UPDATE ChildTable SET ParentId = DifferentParentId where > > > > ChildId = TheIDOfTheChildToMove. > > > > > > But Nhibernate refuses to make this easy. From what I can read on the > > > > web, there are 2 solutions. > > > > > > First solution. Change the HasMany mapping on the parent object to > use > > > > CascadeAll. This lets re-parenting work fine, but breaks deletes. How > > > > do we typically delete an object in our models, we set the > > > > ChildObject.Parent reference to null and remove the ChildObject from > > > > the Parent's ChildObjects collection. Now NHibernate de-references > the > > > > objects, but the data still remains in the database. Outcome = > > > > Developer has to do database programming by calling session.Delete. > > > > > > Second solution. Change the HasMany mapping on the parent object to > > > > use CascadeAllDeleteOrphan. Delete works great now. As per the > > > > documentation. amazing. Except, re-parenting breaks. And we get the > > > > stupid object would be resaved exception. To "fix" this the developer > > > > must first "delete" the object from the session and then re-attach it > > > > to the new parent object. > > > > > > The above solutions invariably require my domain model to have some > > > > knowledge of the underlying data access implementation. This flies in > > > > the face of persistence ignorance which Nhibernate champions in every > > > > other area. > > > > > > Can someone please explain why this is even considered acceptable? > > > > > > I can only hope that someone wiser than me has a solution to this.- > Hide quoted text - > > > > > - Show quoted text - > > > -- Fabio Maulo --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
