mmmm.... you have a Ghost; NH have detected a change in C. Try to recreate the issue in a test but after run the Ghost-Buster.
2009/11/17 Eduardo Scoz <[email protected]> > I'm not trying to blame NH, just trying to understand whats going on. It > may very likely be my code, I understand that. Sorry if I passed the wrong > impression. > > Here's what I have: > > A - mutable has one-to-many with B > B - immutable, has one-to-one with C and one-to-many with D > C and D - mutable > > > I'm changing the state of A and doing a SaveOrUpdate(A), and that is > causing SQL like: > > UPDATE A > UPDATE C > > B is not getting saved, and neither is D. > > All I'm asking is: is this the expected behavior? If it is, great, I can > deal with it. If its not, I can create a test case to help find the issue. > > Thanks Fabio. > > > > On Tue, Nov 17, 2009 at 12:26 PM, Fabio Maulo <[email protected]>wrote: > >> btw Eduardo, >> don't try to find the solution inside NH, your problem is in your code... >> you are changing something that shouldn't change. >> >> 2009/11/17 Fabio Maulo <[email protected]> >> >> no it shouldn't. >>> What you are changing is not some value of the "middle" object but the >>> state of a mutable object (the "right" side). >>> example: >>> - A has a one-to-one with B >>> - A is NOT mutable >>> - B is mutable >>> >>> When you change a property value in B what is changed ? only B and NH >>> must track it. >>> >>> >>> 2009/11/17 Eduardo Scoz <[email protected]> >>> >>>> Yeah, I can see that's the reason for the object to be saved. >>>> >>>> My point, though is: shouldn't the fact that the middle object is >>>> immutable prevent the last object from getting saved when using a >>>> one-to-one? This seems to be the behavior with sets that belong to the >>>> middle object. >>>> >>>> >>>> >>>> On Tue, Nov 17, 2009 at 11:54 AM, Fabio Maulo <[email protected]>wrote: >>>> >>>>> You have answered your question by yourself. >>>>> >>>>> >>>>> 2009/11/17 Eduardo Scoz <[email protected]> >>>>> >>>>>> Sorry, the only mutable object in my example is the "middle" one, >>>>>> User. The right-side one (UserPreferences) is mutable as it needs to be >>>>>> updated from a different part of the system. >>>>>> >>>>>> Thanks Fabio. >>>>>> >>>>>> >>>>>> On Tue, Nov 17, 2009 at 11:33 AM, Fabio Maulo >>>>>> <[email protected]>wrote: >>>>>> >>>>>>> and those object are mutable or not ? (I mean the "right" side of the >>>>>>> one-to-one) >>>>>>> >>>>>>> 2009/11/17 Eduardo Scoz <[email protected]> >>>>>>> >>>>>>> Hi, >>>>>>>> >>>>>>>> I'm not sure if this is a bug or a feature, so I thought it would be >>>>>>>> worthy to post here. >>>>>>>> >>>>>>>> It seems that during a save operation on a tree that contains >>>>>>>> immutable objects, even though those objects are not updated (correct >>>>>>>> behavior), objects that have a one-to-one relationship to those ones >>>>>>>> get >>>>>>>> updated. >>>>>>>> >>>>>>>> For example: >>>>>>>> >>>>>>>> I have a object UserData, with a many-to-one to User with a >>>>>>>> one-to-one UserPreferences. >>>>>>>> User in this case is immutable and kept in read-only cache. >>>>>>>> When I do a save on the UserData object, that object gets saved, and >>>>>>>> so does UserPreferences. >>>>>>>> >>>>>>>> Is that the correct behavior? I would expect only UserData to be >>>>>>>> saved. Sets that are part of User are not updated. >>>>>>>> >>>>>>>> Thanks guys, >>>>>>>> >>>>>>>> Eduardo Scoz >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Fabio Maulo >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Fabio Maulo >>>>> >>>> >>>> >>> >>> >>> -- >>> Fabio Maulo >>> >> >> >> >> -- >> Fabio Maulo >> > > -- Fabio Maulo
