>
> Basically it means that the other side of the join is the parent/owner of
> the other object/s


Not exactly (Read: no). The other side contains the information necessary to
save the association. In a Parent/Child relationship context, that means the
other side contains the reference back to the parent. In a RDBMS context,
that means the child contains the FK field. If you think about it in more
RDBMS terms, and not OO terms, it makes more sense.

Here's my take on it:
The Child object, needs to be written to the child table. The child table
contains a Foreign Key that references the Parent table right? So your
Children table would contain a ParentID column. That's what the Parents
table joins to in a simple relationship.

NHibernate can remove the terminology/use cases of RDBMS's, but only so far.
In this case, Inverse is signifying that the Parent, does not actually
contain a datapoint which will store a reference to children. That's
contained by children. Therefore the child needs to save.

In a ManyToMany situation, they're both technically "parents", that's why
you need a join table between them. So one of them needs to be marked
inverse. it doesn't matter which one (well, it technically does, but not in
the 99% use case), just as long as only one of them is responsible for the
saving. If both of their inverses are set to false, then they're both going
to be contending for which side of the relationship is saving first, and
you're going to end up with row contention.

Inverse should be set on OneToMany's when the Child has a reference back to
the parent (bi-directional). If the child does not have a reference back to
the parent, then inverse should be false, signifying that the Parent now
needs to manage the foreign key association with the child.

On Fri, Feb 5, 2010 at 2:02 PM, Martin From <f...@pc.dk> wrote:

> Hello,
>
> i am trying to understand how Inverse() should be used and how it can
> somehow work in a Convention for the different join types in fluent
> nhibernate.
>
> Does anyone have an example of a typical implementation of how to use
> Inverse ? Or is there no typical pattern of how it should be used ?
>
>
>
> I am having some difficulties figuring out how it should be used.
> As I understand it, Inverse() assigns the resposibility of saving the
> object to the other end of the join, which is also mentioned on the
> Fluent Nhibernate Wiki. Basically it means that the other side of the
> join is the parent/owner of the other object/s ?
>
> As far as i have been able to find out Inverse is always set to
> "false" on both sides per default in Hibernate, and it is not possible
> to set Inverse on the Reference mapping. Is defaults different in
> Fluent Nhibernate ?
> I guess in most cases the side with the HasMany or HasManyToMany join
> declaration is the one responsible for the other objects so Inverse
> should be set on the Reference which is not possible (- clearly i dont
> understand it correctly).
>
> When looking at the example from "Getting Started" on the Fluent
> Nhibernate page i get confused because Inverse() is set on the HasMany
> join declared for the Property "Staff" in the Store mappings.
> But looking at the database diagram the Employee (Staff) table have a
> relation to the Store table through the foreign key Store_id, which
> means that a Store needs to exist in order for the Employee to exist,
> therefore in my mind the Store object should have the responsibility
> of saving an Employee object.
>
> Fluent Nhibernate - Getting Started -
> http://wiki.fluentnhibernate.org/Getting_started#Mappings
>
>
> I clearly must be misunderstanding something about Inverse.
> Maybe it is the opposite of what i think? - That Inverse() should be
> set on the side that is responsible of saving the objects in the other
> end of the join ?
>
> Or maybe it means something else ? :)
>
>
>
> Martin
>
>
> ps. i guess how Inverse() works is more a Hibernate related question,
> but what i am trying to do is create a Fluent Nhibernate Convetion
> using it "correctly".
>
> --
> You received this message because you are subscribed to the Google Groups
> "Fluent NHibernate" group.
> To post to this group, send email to fluent-nhibern...@googlegroups.com.
> To unsubscribe from this group, send email to
> fluent-nhibernate+unsubscr...@googlegroups.com<fluent-nhibernate%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/fluent-nhibernate?hl=en.
>
>


-- 
- Hudson
http://www.bestguesstheory.com
http://twitter.com/HudsonAkridge

-- 
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibern...@googlegroups.com.
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en.

Reply via email to