Some answers below, hopefully correct. :)
2009/8/20 spiralni <[email protected]>: > > I don't get it :( > > I've read, and test all the references in the web, but this concept is > just to complex for me.. Hope you can clarify me. > > From the 2.1 Reference, I found this in the Bidirectional Associations > topics, > > 1. "Please note that NHibernate does not support bidirectional one-to- > many associations with an indexed collection (list, map or array) as > the "many" end, you have to use a set or bag mapping. " > I believe this is because if the many-side (the collection) is mapped with inverse, it isn't persisted, therefore its knowledge of the index would be lost anyway. The other side just has a direct object reference, so no info about the index there either. Is it possible to have a bidirectional one-to-many where the many side is not inverse? > 2. "Changes made only to the inverse end of the association are not > persisted." > > Think about client and products, if products is marked with Inverse = > true, cannot I change the product itselft, must it to be updated via > client.. ICollection Parent.Children is inverse Parent Child.Parent is not inverse. If you now do myParent.Children.Add(newChild) this will not be persisted because Children is mapped with inverse=true. In order to get the new association persisted you have to do newChild.Parent = myParent. This will be saved by NHibernate. (It would be good form to _also_ add it to the Parent's Children collection, otherwise it won't be visible there until you have reloaded the Parent object fresh from the database. Other properties of Parent (in your case Product) is of course not affected by this and will be updated as necessary when dirty. > > 4. "Mapping one end of an association with inverse="true" doesn't > affect the operation of cascades, both are different concepts! " > > whaaaat???? > With Parent/Child as above, suppose that Parent.Children is also mapped with cascade ="all-delete-orphan". If you now do session.Delete(myParent), the delete will cascade to all children, so that they are also deleted. This behaviour is the same regardless of the inverse setting. Likewise, if you create a new Parent and a new child and do: newChild.Parent = newParent; newParent.Children.Add(newChild); // not necessary for NHibernate in this case but good form. session.Add(newParent); Then the new child will also be persisted, even though we haven't done session.Add(newChild) ourselves. /Oskar --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
