﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Ayende @ Rahien</title><link>http://ayende.com</link><description>Ayende @ Rahien</description><copyright>Copyright (C) Ayende Rahien  2004 - 2021 (c) 2026</copyright><ttl>60</ttl><item><title>Ayende Rahien commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>Stevey,
  
Take a look at constrained="true"
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment15</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment15</guid><pubDate>Tue, 28 Apr 2009 04:33:18 GMT</pubDate></item><item><title>stevey commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>I have problem about this on Eager Load. my mapping file:
  
&lt;class  
&lt;id  
&lt;generator  
&gt;  
&lt;property  
&lt;one-to-one  
                property-ref="Person"
  
                class="MyDomain.Test.Employee, MyDomain" 
  
                cascade="all" fetch="join" lazy="false"/&gt;
  
&gt;  
&lt;class  
&lt;id  
&lt;generator  
&gt;  
&lt;property  
&lt;many-to-one  
                 column="PeopleID"
  
                 class="MyDomain.Test.Person, MyDomain" unique="true" 
  
                 /&gt;
  
&gt;  
I have one person and one employee in my DB and I run this simple test:
  
  
            var person  = repository.FindByID(new Guid	(  "30ad691d-84c0-4175-815f-9bf800f86766"));
  
            Assert.That(person,Is.Not.Null);
  
            Assert.That(person.Employee, Is.Not.Null);
  
  
It generate 2 sql statements:
  
NHibernate: SELECT person0_.ID as ID4_1_, person0_.Name as Name4_1_, employee1_.ID as ID3_0_, employee1_.Name as Name3_0_, employee1_.PeopleID as PeopleID3_0_ FROM People person0_ left outer join Employees employee1_ on person0_.ID=employee1_.PeopleID WHERE person0_.ID=@p0; @p0 = '30ad691d-84c0-4175-815f-9bf800f86766'
  
  
NHibernate: SELECT employee0_.ID as ID3_0_, employee0_.Name as Name3_0_, employee0_.PeopleID as PeopleID3_0_ FROM Employees employee0_ WHERE employee0_.PeopleID=@p0; @p0 = '30ad691d-84c0-4175-815f-9bf800f86766'
  
  
Which I assume it should only generate one.
  
  
Can I make it only generate one?
  
  
  
  
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment14</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment14</guid><pubDate>Mon, 27 Apr 2009 21:13:57 GMT</pubDate></item><item><title>Ayende Rahien commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>Take a look at the "any" post
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment13</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment13</guid><pubDate>Thu, 23 Apr 2009 18:05:02 GMT</pubDate></item><item><title>Luiz Sergio commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>How can I to create a mapping when a Person can be Employee and/or Customer and/or Author?
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment12</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment12</guid><pubDate>Thu, 23 Apr 2009 18:03:17 GMT</pubDate></item><item><title>Nik commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>In your sample Person.Id, Employee.Id and Employee.Person equals, it's not real case, this what i want to say.
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment11</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment11</guid><pubDate>Wed, 22 Apr 2009 16:18:51 GMT</pubDate></item><item><title>Nik commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>In your sample Person.Id, Employee.Id and Employee.Person, it's not real case, this what i want  to say.
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment10</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment10</guid><pubDate>Wed, 22 Apr 2009 16:15:14 GMT</pubDate></item><item><title>Ayende Rahien commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>Nik,
  
You set it up in such a way that the Id or Person and the Employee must have the same value.
  
That is what foreign means.
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment9</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment9</guid><pubDate>Wed, 22 Apr 2009 14:51:57 GMT</pubDate></item><item><title>Nik commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>£class name="Person" table="People"£
  
	£id name="Id"£
  
        £generator class="foreign"£
  
          £param name="property"£ Employee £/param£
  
       £/generator£
  
	£/id£
  
	£property name="Name" /£
  
	£one-to-one name="Employee" class="Employee" constrained="true"/£
  
£/class£
  
  
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment8</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment8</guid><pubDate>Wed, 22 Apr 2009 11:06:53 GMT</pubDate></item><item><title>Nik commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>In database person with id=8, employee with id=3(and in person column 8).
  
Code:
  
  
   using (var session = sessionFactory.OpenSession())
  
            using (var tx = session.BeginTransaction())
  
            {
  
                var employee = session.Get
&lt;person(8).Employee;
  
                Console.WriteLine(employee.Role);
  
                tx.Commit();
  
            }
  
  
generates:
  
  
SELECT person0_.Id   as Id1_0_,
  
       person0_.Name as Name1_0_
  
FROM   People person0_
  
WHERE  person0_.Id = 8 /* @p0 */
  
  
SELECT employee0_.Id     as Id0_1_,
  
       employee0_.Role   as Role0_1_,
  
       employee0_.Person as Person0_1_,
  
       person1_.Id       as Id1_0_,
  
       person1_.Name     as Name1_0_
  
FROM   Employee employee0_
  
       left outer join People person1_
  
         on employee0_.Person = person1_.Id
  
WHERE  employee0_.Id = 8 /* @p0 */
  
  
Exception was thrown:
  
No row with the given identifier exists[OneToOneEntities.Employee#8]
  
  
If I'll set fetch="join" on one-to-one association, NH will generate this query:
  
SELECT person0_.Id       as Id1_2_,
  
       person0_.Name     as Name1_2_,
  
       employee1_.Id     as Id0_0_,
  
       employee1_.Role   as Role0_0_,
  
       employee1_.Person as Person0_0_,
  
       person2_.Id       as Id1_1_,
  
       person2_.Name     as Name1_1_
  
FROM   People person0_
  
       inner join Employee employee1_
  
         on person0_.Id = employee1_.Id -- Yeah!!!!!!!!!!!!!!!!
  
       left outer join People person2_
  
         on employee1_.Person = person2_.Id
  
WHERE  person0_.Id = 8 /* @p0 */
  
  
and {"Object reference not set to an instance of an object."} Exception will be thrown.
  
  
one-to-one association bind primary keys:
  
  
&lt;class  
&lt;id  
&lt;generator  
&lt;param Employee 
  
&gt;  
  
&lt;property  
&lt;one-to-one  
&gt;  
  
  
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment7</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment7</guid><pubDate>Wed, 22 Apr 2009 11:04:30 GMT</pubDate></item><item><title>Ayende Rahien commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>Nik, 
  
what is the error you are getting?
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment6</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment6</guid><pubDate>Wed, 22 Apr 2009 05:27:49 GMT</pubDate></item><item><title>Nik commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>Your sample doesnt work if I use guid generator. I think this sample is not correct way using one-to-one mapping.
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment5</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment5</guid><pubDate>Tue, 21 Apr 2009 20:16:39 GMT</pubDate></item><item><title>Ayende Rahien commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>Nik,
  
Yes, it is possible. Take care to ensure that it is always set to A person, if you are using constrained, though.
  
  
Chris,
  
Use the Where property
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment4</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment4</guid><pubDate>Mon, 20 Apr 2009 08:25:12 GMT</pubDate></item><item><title>Chris commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>How do you emulate a one to many relationship in ActiveRecord, where you need to filter the key based on a column? For example my MailAccount has lots of Contacts, but I only want to those Contacts of a particular type in the relationship? From what I can see it's not possible in AR, but is in NH.
  
  
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment3</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment3</guid><pubDate>Sun, 19 Apr 2009 15:38:21 GMT</pubDate></item><item><title>Steve Willcock commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>Great explanation, the constrained="true" / foreign-key="none" part is really helpful.
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment2</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment2</guid><pubDate>Sun, 19 Apr 2009 11:40:11 GMT</pubDate></item><item><title>Nik commented on NHibernate Mapping - &lt;one-to-one/&gt;</title><description>Hi.
  
Is it possible set new Employee on existing Person?
  
Thanks for reply.
</description><link>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment1</link><guid>http://ayende.com/3960/nhibernate-mapping-one-to-one#comment1</guid><pubDate>Sun, 19 Apr 2009 08:18:55 GMT</pubDate></item></channel></rss>