<class name="Person">
 <id name="Id" type="Int32">
   <generator class="hilo" />
 </id>
 <property name="Name" />
 <many-to-one name="Address" unique="true" cascade="all" />
</class>
<class name="Address">
 <id name="Id" type="Int32">
   <generator class="hilo" />
 </id>
 <one-to-one name="Person" cascade="all" property-ref="Address" />
 <property name="Street" />
 <property name="CivicNumber" />
</class>


On Wed, Jul 7, 2010 at 1:37 AM, xpista <[email protected]> wrote:

> Could you tell me how should I fix it to make it work?
> What exactly is wrong?
>
> Thanks, Stefan
>
> On Jul 7, 12:36 am, Fabio Maulo <[email protected]> wrote:
> > Wrong mapping for a bidirectional-one-to-one based on FK
> >
> >
> >
> > On Tue, Jul 6, 2010 at 10:54 AM, xpista <[email protected]> wrote:
> > > Hi,
> >
> > >  I have a problem with updating one-to-one mapped entity.
> >
> > >  In first session I create the class with a property which I map one-
> > > to-one. Cascading is set to "all".
> > >  In second I load the entity and try to _replace_ the property. By
> > > replace I mean I set it to new instance.
> >
> > >  What I expect is that the old instance/record will be deleted and
> > > the new one inserted.
> >
> > >  However what I see is only insert statement (which by subsequent
> > > load in new session leads to exception:
> > > NHibernate.HibernateException : More than one row with the given
> > > identifier was found.)
> >
> > >  Is there a way make the one-to-one mapping work as I expect or have
> > > I misunderstood the whole idea of one-to-one mapping?
> >
> > >  Thanks for any pointers, Stefan
> >
> > > --------------
> >
> > > public class Master
> > > {
> > >    public virtual Guid Id { get; set; }
> > >    public virtual SingleChild SingleChild { get; set; } // one-to-one
> > > }
> >
> > > public class SingleChild
> > > {
> > >    public virtual Guid Id { get; set; }
> > >    public virtual Master Master { get; set; } // many-to-one
> > > }
> >
> > > --------------
> >
> > > <class name="Data.Master, Data" table="MASTER" >
> > >  <id name="Id" column="ID">
> > >    <generator class="guid.comb"/>
> > >  </id>
> >
> > >  <one-to-one name="SingleChild" property-ref="Master" cascade="all" /
> >
> > > </class>
> >
> > > <class name="Data.SingleChild, Data" table="SINGLE_CHILD" >
> > >  <id name="Id" column="ID">
> > >    <generator class="guid.comb"/>
> > >  </id>
> >
> > >  <many-to-one name="Master" column="FK_MASTER" cascade="all" />
> > > </class>
> >
> > > --------------
> >
> > > [Test]
> > > public void VerifyOneToOneUpdate()
> > > {
> > >    Guid gid;
> > >    // Create
> > >    using (var session = Global.Factory.OpenSession())
> > >    using (var tran = session.BeginTransaction())
> > >    {
> > >        var master = new Master();
> > >        master.SingleChild = new SingleChild {Master = master};
> > >        session.Save(master);
> > >        gid = master.Id;
> > >        tran.Commit();
> > >    }
> >
> > >    // Update ??
> > >    using (var session = Global.Factory.OpenSession())
> > >    using (var tran = session.BeginTransaction())
> > >    {
> > >        var p = session.Get<Master>(gid);
> > >        Assert.NotNull(p);
> > >        p.SingleChild = new SingleChild { Master = p };
> > >        session.SaveOrUpdate(p);
> > >        tran.Commit();
> > >    }
> >
> > >    // Reload
> > >    using (var session = Global.Factory.OpenSession())
> > >    using (var tran = session.BeginTransaction())
> > >    {
> > >        var p = session.Get<Master>(gid); //
> > > NHibernate.HibernateException : More than one row with the given
> > > identifier was found
> > >        Assert.NotNull(p);
> > >    }
> > > }
> >
> > > --
> > > 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]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[email protected]>
> >
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/nhusers?hl=en.
> >
> > --
> > 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]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>


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

Reply via email to