Not addressing the posted issue..but. if you have:

 

group.Users.Add(user);

user.Group = group;

 

you very likely have a bad object implementation/design. The exception would
be if it is possible for both of the following to be legal:

 

                1:  A Group's Users collection may contain a user where the
user.Group is set to something else

                2:  A user.Group may be set to a group without the group's
Users collection containing said user

 

[note: these may sound the same, but are slightly different]

 

 

 

From: [email protected] [mailto:[email protected]] On Behalf
Of Andrewz
Sent: Thursday, December 27, 2012 5:42 PM
To: [email protected]
Subject: [nhusers] questions about sql logging and the Inverse in a one to
many relationship

 

Hello,

 

I have a bi-directional one to many relationship between a User and a Group,
defined as follows:

 

http://pastebin.com/qxYZc4jV

 

Note that the Inverse is not set. Based on my understanding this means that
NHibernate sets the Group_Id each of for the User automatically

 

Here is my program, adding a new group and assigning an existing user to
this group:

 

var user = session.Get<User>(1);              

var group = new Group();

group.Users.Add(user);

user.Group = group;

session.Save(user);

 

Question #1: The SQL output I get in the console using the show_sql setting,
is this one: http://pastebin.com/Qiagzt6J

                    It does not show how the Group_id is set for the user,
only the group insert.

                    Why is that? Isn't SQL output showing everything? How to
see the complete SQL?

 

Question #2: Next, I am adding a new user to an existing group

 

 var group = session.Load<Group>(1);

var user = new User();

user.Group = group;

group.Users.Add(user);

 

The output is this one: http://pastebin.com/5RF7Lzq2

Why is it getting all users of the group in the 2nd statement? 

I guess it's because of accessing the collection when calling
group.Users.Add(user), but why can't NHibernate see it's actually adding a
new user?

 

The weird thing is that if I am setting Inverse() on the collection, it
makes the insert without retrieving the collection, which is how it should
work.

 

I know that in practice, setting Inverse is almost always needed(you want to
have non null restriction on the Group_id not null, and without Inverse,
this is not possible because the insert will fail), but I am really trying
to understand what is going on.

 

Thanks!

Andrew

-- 
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/-/sXSKABVMWQEJ.
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.

-- 
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