<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://nhforge.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Lazy Loaded One-To-One With NHibernate </title><link>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate.aspx</link><description>Quick starts, tutorials, code snippets, custom user types, application blocks and more...</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Lazy Loaded One-To-One With NHibernate </title><link>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate.aspx</link><pubDate>Thu, 08 Sep 2011 00:13:38 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:45</guid><dc:creator>John Davidson</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate/comments.aspx</comments><description>Current revision posted to How to by John Davidson on 07/09/2011 09:13:38 p.m.&lt;br /&gt;
&lt;h2&gt;Lazy Loaded One-To-One With NHibernate &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;UPDATE 20081114&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;The one-to-one solution I had posted
turned out not to work for updates, :(, in the end I had to use a
many-to-one map with a unique foreign key association to get this to
work, the updated example is below. Sorry for my EPIC FAIL :)...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;G&amp;#39;day,&lt;/p&gt;
&lt;p&gt;I
am working on something at the moment and I am storing BLOB data for
documents in the database, I am storing things like name and data which
is a binary field. |&lt;br /&gt;Now I wan&amp;#39;t to load the binary data as loading
this all the time is very inneficient. So to get this to work I had to
split this to two tables, one with my meta data and another one-to-one&lt;br /&gt;table to store the BLOB. NOW the fun began I created the two tables:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;Documents&lt;br /&gt;-------------------&lt;br /&gt;(PK) Id&lt;br /&gt;(FK Unique) DocumentFileId&lt;br /&gt;Name&lt;br /&gt;&lt;br /&gt;DocumentFiles&lt;br /&gt;-------------------&lt;br /&gt;(PK) Id&lt;br /&gt;Data&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;From this I created my POCO classes for the Document and DocumentFile map.&lt;/p&gt;
&lt;p&gt;public class Document {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int Id { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Name { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DocumentFile DocumentFile { get; set; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;public class DocumentFile {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual int Id { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual Document Document { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual byte[] Data { get; set; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Now
on to the mappings, I thought this would be as easy as created a
one-to-one mapping with lazy=&amp;quot;proxy&amp;quot; set on the one-to-one on the
Document class but this was not the case. &lt;br /&gt;You NEED to set constrained=&amp;quot;true&amp;quot; on the mapping, basically going from this post I found: &lt;a href="http://www.hibernate.org/162.html#A5"&gt;http://www.hibernate.org/162.html#A5&lt;/a&gt;. Say we have A-&amp;gt;B where this is a 1-1 relationship,&lt;br /&gt;now
without a constraint from A-B this means A can exist without B, so
there is a possiblity that B is null, a Proxy to B will be not null and
won&amp;#39;t work here.&lt;br /&gt;&lt;br /&gt;But when we know A and B will always belong together it is ok to create a Proxy for B. Now my final mapping files looks like so:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;i&gt;&lt;strong&gt;BUUUT&lt;/strong&gt;&lt;/i&gt;&lt;/span&gt;&lt;i&gt;&lt;strong&gt;&amp;nbsp; &lt;/strong&gt;&lt;/i&gt;as
I soon found out if in the A mapping you constrain B it will mean it
will try to insert B first and fail to generate a primary key with the
foreign key generator, hence not working as expected, I had to change
the mappings to use a many-to-one unique foreign key mapping to get
this to work. I updated the mappings below, the main differences are
highlighted below:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;class name=&amp;quot;NHibernateDocumentTest.Document, NHibernateDocumentTest&amp;quot; table=&amp;quot;Documents&amp;quot; lazy=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;id name=&amp;quot;Id&amp;quot; column=&amp;quot;Id&amp;quot; type=&amp;quot;integer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generator class=&amp;quot;native&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&amp;quot;Name&amp;quot; column=&amp;quot;Name&amp;quot; type=&amp;quot;string&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp; &amp;lt;many-to-one name=&amp;quot;DocumentFile&amp;quot; cascade=&amp;quot;all-delete-orphan&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lazy=&amp;quot;proxy&amp;quot; column=&amp;quot;DocumentFileId&amp;quot; unique=&amp;quot;true&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;class name=&amp;quot;NHibernateDocumentTest.DocumentFile, NHibernateDocumentTest&amp;quot; table=&amp;quot;DocumentFiles&amp;quot; lazy=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt; &amp;lt;id name=&amp;quot;Id&amp;quot; column=&amp;quot;Id&amp;quot; type=&amp;quot;integer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generator class=&amp;quot;native&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/id&amp;gt;&amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&amp;quot;Data&amp;quot; column=&amp;quot;Data&amp;quot; type=&amp;quot;Byte[]&amp;quot; /&amp;gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;one-to-one name=&amp;quot;Document&amp;quot; constrained=&amp;quot;true&amp;quot; property-ref=&amp;quot;DocumentFile&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;a href="http://www.mustuniversity.com/programs/diploma/graduate-diploma.html"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Graduate&lt;/span&gt;
 &lt;span style="text-decoration: line-through; color: red;"&gt;Diploma&lt;/span&gt;&lt;/a&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;AND&lt;/span&gt; &lt;a href="http://www.mustuniversity.com/programs/degree/phd-degree.html"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Phd&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;Degree&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;And
then we are done, this works fine. So the trick is for a one-to-one to
work with Lazy loading you must use a unique foreign key associated
with a many-to-one mapping to your child.&lt;a href="http://www.mustuniversity.com/programs/certificate/graduate-certificate.html"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Graduate&lt;/span&gt;
 &lt;span style="text-decoration: line-through; color: red;"&gt;Certificate&lt;/span&gt;&lt;/a&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;AND&lt;/span&gt; &lt;a href="http://www.mustuniversity.com/programs/diploma/undergraduate-diploma.html"&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;Undergraduate&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Diploma&lt;/span&gt;&lt;/a&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;AND&lt;/span&gt; &lt;a href="http://www.mustuniversity.com/schools-majors/"&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Online&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;Schools&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks&lt;br /&gt;Stefan&lt;/p&gt;</description></item><item><title>Lazy Loaded One-To-One With NHibernate </title><link>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate/revision/3.aspx</link><pubDate>Wed, 30 Mar 2011 11:06:31 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:515</guid><dc:creator>markweee</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate/comments.aspx</comments><description>Revision 3 posted to How to by markweee on 30/03/2011 08:06:31 a.m.&lt;br /&gt;
&lt;h2&gt;Lazy Loaded One-To-One With NHibernate &lt;/h2&gt;
&lt;p&gt;&lt;b&gt;UPDATE 20081114&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;The one-to-one solution I had posted
turned out not to work for updates, :(, in the end I had to use a
many-to-one map with a unique foreign key association to get this to
work, the updated example is below. Sorry for my EPIC FAIL :)...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;G&amp;#39;day,&lt;/p&gt;
&lt;p&gt;I
am working on something at the moment and I am storing BLOB data for
documents in the database, I am storing things like name and data which
is a binary field. |&lt;br /&gt;Now I wan&amp;#39;t to load the binary data as loading
this all the time is very inneficient. So to get this to work I had to
split this to two tables, one with my meta data and another one-to-one&lt;br /&gt;table to store the BLOB. NOW the fun began I created the two tables:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;Documents&lt;br /&gt;-------------------&lt;br /&gt;(PK) Id&lt;br /&gt;(FK Unique) DocumentFileId&lt;br /&gt;Name&lt;br /&gt;&lt;br /&gt;DocumentFiles&lt;br /&gt;-------------------&lt;br /&gt;(PK) Id&lt;br /&gt;Data&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;From this I created my POCO classes for the Document and DocumentFile map.&lt;/p&gt;
&lt;p&gt;public class Document {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int Id { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Name { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DocumentFile DocumentFile { get; set; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;public class DocumentFile {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual int Id { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual Document Document { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual byte[] Data { get; set; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Now
on to the mappings, I thought this would be as easy as created a
one-to-one mapping with lazy=&amp;quot;proxy&amp;quot; set on the one-to-one on the
Document class but this was not the case. &lt;br /&gt;You NEED to set constrained=&amp;quot;true&amp;quot; on the mapping, basically going from this post I found: &lt;a href="http://www.hibernate.org/162.html#A5"&gt;http://www.hibernate.org/162.html#A5&lt;/a&gt;. Say we have A-&amp;gt;B where this is a 1-1 relationship,&lt;br /&gt;now
without a constraint from A-B this means A can exist without B, so
there is a possiblity that B is null, a Proxy to B will be not null and
won&amp;#39;t work here.&lt;br /&gt;&lt;br /&gt;But when we know A and B will always belong together it is ok to create a Proxy for B. Now my final mapping files looks like so:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;i&gt;&lt;b&gt;BUUUT&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp; &lt;/b&gt;&lt;/i&gt;as
I soon found out if in the A mapping you constrain B it will mean it
will try to insert B first and fail to generate a primary key with the
foreign key generator, hence not working as expected, I had to change
the mappings to use a many-to-one unique foreign key mapping to get
this to work. I updated the mappings below, the main differences are
highlighted below:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;class name=&amp;quot;NHibernateDocumentTest.Document, NHibernateDocumentTest&amp;quot; table=&amp;quot;Documents&amp;quot; lazy=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;id name=&amp;quot;Id&amp;quot; column=&amp;quot;Id&amp;quot; type=&amp;quot;integer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generator class=&amp;quot;native&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&amp;quot;Name&amp;quot; column=&amp;quot;Name&amp;quot; type=&amp;quot;string&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;&amp;nbsp; &amp;lt;many-to-one name=&amp;quot;DocumentFile&amp;quot; cascade=&amp;quot;all-delete-orphan&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lazy=&amp;quot;proxy&amp;quot; column=&amp;quot;DocumentFileId&amp;quot; unique=&amp;quot;true&amp;quot; /&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;class name=&amp;quot;NHibernateDocumentTest.DocumentFile, NHibernateDocumentTest&amp;quot; table=&amp;quot;DocumentFiles&amp;quot; lazy=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt; &amp;lt;id name=&amp;quot;Id&amp;quot; column=&amp;quot;Id&amp;quot; type=&amp;quot;integer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generator class=&amp;quot;native&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/id&amp;gt;&amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&amp;quot;Data&amp;quot; column=&amp;quot;Data&amp;quot; type=&amp;quot;Byte[]&amp;quot; /&amp;gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;one-to-one name=&amp;quot;Document&amp;quot; constrained=&amp;quot;true&amp;quot; property-ref=&amp;quot;DocumentFile&amp;quot; /&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt; &lt;a href="http://www.mustuniversity.com/programs/diploma/graduate-diploma.html"&gt;&lt;span style="background: SpringGreen;"&gt;Graduate&lt;/span&gt;
 &lt;span style="background: SpringGreen;"&gt;Diploma&lt;/span&gt;&lt;/a&gt; &lt;span style="background: SpringGreen;"&gt;AND&lt;/span&gt; &lt;a href="http://www.mustuniversity.com/programs/degree/phd-degree.html"&gt;&lt;span style="background: SpringGreen;"&gt;Phd&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;Degree&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;And
then we are done, this works fine. So the trick is for a one-to-one to
work with Lazy loading you must use a unique foreign key associated
with a many-to-one mapping to your child. &lt;a href="http://www.mustuniversity.com/programs/certificate/graduate-certificate.html"&gt;&lt;span style="background: SpringGreen;"&gt;Graduate&lt;/span&gt;
 &lt;span style="background: SpringGreen;"&gt;Certificate&lt;/span&gt;&lt;/a&gt; &lt;span style="background: SpringGreen;"&gt;AND&lt;/span&gt; &lt;a href="http://www.mustuniversity.com/programs/diploma/undergraduate-diploma.html"&gt;
&lt;span style="background: SpringGreen;"&gt;Undergraduate&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Diploma&lt;/span&gt;&lt;/a&gt; &lt;span style="background: SpringGreen;"&gt;AND&lt;/span&gt; &lt;a href="http://www.mustuniversity.com/schools-majors/"&gt;&lt;span style="background: SpringGreen;"&gt;Online&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;Schools&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks&lt;br /&gt;Stefan&lt;/p&gt;</description></item><item><title>Lazy Loaded One-To-One With NHibernate </title><link>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate/revision/2.aspx</link><pubDate>Fri, 14 Nov 2008 01:57:49 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:369</guid><dc:creator>stefan.sedich</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate/comments.aspx</comments><description>Revision 2 posted to How to by stefan.sedich on 13/11/2008 10:57:49 p.m.&lt;br /&gt;
&lt;h2&gt;Lazy Loaded One-To-One With NHibernate &lt;/h2&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="background: SpringGreen;"&gt;UPDATE&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;20081114&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="background: SpringGreen;"&gt;The&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;one-to-one&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;solution&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;I&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;had&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;posted&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;turned&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;out&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;not&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;work&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;updates&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;(,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;in&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;end&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;I&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;had&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;use&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;many-to-one&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;map&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;with&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;unique&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;foreign&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;key&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;association&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;get&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;this&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;work&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;updated&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;example&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;is&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;below&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Sorry&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;for&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;my&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;EPIC&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;FAIL&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="background: SpringGreen;"&gt;G&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;day&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I
am working on something at the moment and I am storing BLOB data for
documents in the database, I am storing things like name and data which
is a binary field. |&lt;br /&gt;Now I wan&amp;#39;t to load the binary data as loading
this all the time is very inneficient. So to get this to work I had to
split this to two tables, one with my meta data and another one-to-one&lt;br /&gt;table to store the BLOB. NOW the fun began I created the two tables:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;Documents&lt;br /&gt;-------------------&lt;br /&gt;(PK) Id&lt;br /&gt;&lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;FK&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Unique&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;DocumentFileId&lt;/span&gt;&lt;br /&gt;Name&lt;br /&gt;&lt;br /&gt;DocumentFiles&lt;br /&gt;-------------------&lt;br /&gt;(&lt;span style="text-decoration: line-through; color: red;"&gt;FK)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;PK)&lt;/span&gt; Id&lt;br /&gt;Data&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;From this I created my POCO classes for the Document and DocumentFile map.&lt;/p&gt;
&lt;p&gt;public class Document {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int Id { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Name { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DocumentFile DocumentFile { get; set; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;public class DocumentFile {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual int Id { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual Document Document { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual byte[] Data { get; set; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Now
on to the mappings, I thought this would be as easy as created a
one-to-one mapping with lazy=&amp;quot;proxy&amp;quot; set on the one-to-one on the
Document class but this was not the case. &lt;br /&gt;You NEED to set constrained=&amp;quot;true&amp;quot; on the mapping, basically going from this post I found: &lt;a href="http://www.hibernate.org/162.html#A5"&gt;http://www.hibernate.org/162.html#A5&lt;/a&gt;. Say we have A-&amp;gt;B where this is a 1-1 relationship,&lt;br /&gt;now
without a constraint from A-B this means A can exist without B, so
there is a possiblity that B is null, a Proxy to B will be not null and
won&amp;#39;t work here.&lt;br /&gt;&lt;br /&gt;But when we know A and B will always belong together it is ok to create a Proxy for B. Now my final mapping files looks like so:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;i&gt;&lt;b&gt;&lt;span style="background: SpringGreen;"&gt;BUUUT&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;i&gt;&lt;b&gt;&amp;nbsp; &lt;/b&gt;&lt;/i&gt;&lt;span style="background: SpringGreen;"&gt;as&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;I&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;soon&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;found&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;out&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;if&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;in&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;A&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;mapping&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;you&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;constrain&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;B&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;it&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;mean&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;it&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;try&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;insert&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;B&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;first&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;fail&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;generate&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;primary&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;key&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;with&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;foreign&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;key&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;generator&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;hence&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;not&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;working&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;as&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;expected&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;I&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;had&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;change&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;mappings&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;use&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;many-to-one&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;unique&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;foreign&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;key&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;mapping&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;get&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;this&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;work&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;I&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;updated&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;mappings&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;below&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;main&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;differences&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;are&lt;/span&gt;
&lt;span style="background: SpringGreen;"&gt;highlighted&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;below&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;class name=&amp;quot;NHibernateDocumentTest.Document, NHibernateDocumentTest&amp;quot; table=&amp;quot;Documents&amp;quot; lazy=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;id name=&amp;quot;Id&amp;quot; column=&amp;quot;Id&amp;quot; type=&amp;quot;integer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generator class=&amp;quot;native&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&amp;quot;Name&amp;quot; column=&amp;quot;Name&amp;quot; type=&amp;quot;string&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;one-to-one&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;&amp;lt;many-to-one&lt;/span&gt; name=&amp;quot;DocumentFile&amp;quot; cascade=&amp;quot;all-delete-orphan&amp;quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lazy=&amp;quot;proxy&amp;quot; &lt;span style="text-decoration: line-through; color: red;"&gt;constrained=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;column=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;DocumentFileId&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;unique=&lt;/span&gt;&amp;quot;true&amp;quot; /&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;class name=&amp;quot;NHibernateDocumentTest.DocumentFile, NHibernateDocumentTest&amp;quot; table=&amp;quot;DocumentFiles&amp;quot; lazy=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt; &amp;lt;id name=&amp;quot;Id&amp;quot; column=&amp;quot;Id&amp;quot; type=&amp;quot;integer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generator class=&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;foreign&amp;quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;param&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;name=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;property&amp;quot;&amp;gt;Document&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/generator&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="text-decoration: line-through; color: red;"&gt;&amp;lt;/id&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;&amp;quot;native&amp;quot;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;/&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background: SpringGreen;"&gt;&amp;lt;/id&amp;gt;&amp;nbsp;&lt;/span&gt; &amp;nbsp;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&amp;quot;Data&amp;quot; column=&amp;quot;Data&amp;quot; type=&amp;quot;Byte[]&amp;quot; /&amp;gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;one-to-one name=&amp;quot;Document&amp;quot; &lt;span style="text-decoration: line-through; color: red;"&gt;fetch=&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;&amp;quot;select&amp;quot;&lt;/span&gt; constrained=&amp;quot;true&amp;quot; &lt;span style="background: SpringGreen;"&gt;property-ref=&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;quot;DocumentFile&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;Basically&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;the&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;one-to-one&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;in&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;the&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;Document&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;has&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;contraint&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;for&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;DocumentFile&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;so&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;these&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;always&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;belong&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;together&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;as&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;is&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;the&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;case&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;here&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;also&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;I&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;have&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;set&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;lazy&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;to&lt;/span&gt;
&lt;span style="text-decoration: line-through; color: red;"&gt;Proxy&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;for&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;this&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;one-to-one&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;And
then we are done, this works fine. So the trick is for a one-to-one to
work with Lazy loading you must &lt;span style="text-decoration: line-through; color: red;"&gt;have&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;use&lt;/span&gt; a &lt;span style="text-decoration: line-through; color: red;"&gt;constraint&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;on&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;your&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;relationship&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;.&lt;/span&gt; &lt;br /&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;This&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;can&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;also&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;be&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;done&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;unique&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;foreign&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;key&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;associated&lt;/span&gt;
with a &lt;span style="text-decoration: line-through; color: red;"&gt;Many-To-One&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;where&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;it&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;is&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;the&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;case&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;where&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;A&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;can&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;exist&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;without&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;B&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;many-to-one&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;mapping&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;your&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;child&lt;/span&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks&lt;br /&gt;Stefan&lt;/p&gt;</description></item><item><title>Lazy Loaded One-To-One With NHibernate </title><link>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate/revision/1.aspx</link><pubDate>Thu, 13 Nov 2008 14:15:11 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:193</guid><dc:creator>stefan.sedich</dc:creator><comments>http://nhforge.org/wikis/howtonh/lazy-loaded-one-to-one-with-nhibernate/comments.aspx</comments><description>Revision 1 posted to How to by stefan.sedich on 13/11/2008 11:15:11 a.m.&lt;br /&gt;
&lt;p&gt;I am working on something at the moment and I am storing BLOB data
for documents in the database, I am storing things like name and data
which is a binary field. |&lt;br /&gt;Now I wan&amp;#39;t to load the binary data as
loading this all the time is very inneficient. So to get this to work I
had to split this to two tables, one with my meta data and another
one-to-one&lt;br /&gt;table to store the BLOB. NOW the fun began I created the two tables:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;Documents&lt;br /&gt;-------------------&lt;br /&gt;(PK) Id&lt;br /&gt;Name&lt;br /&gt;&lt;br /&gt;DocumentFiles&lt;br /&gt;-------------------&lt;br /&gt;(FK) Id&lt;br /&gt;Data&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;From this I created my POCO classes for the Document and DocumentFile map.&lt;/p&gt;
&lt;p&gt;public class Document {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int Id { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Name { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DocumentFile DocumentFile { get; set; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;public class DocumentFile {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual int Id { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual Document Document { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public virtual byte[] Data { get; set; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Now
on to the mappings, I thought this would be as easy as created a
one-to-one mapping with lazy=&amp;quot;proxy&amp;quot; set on the one-to-one on the
Document class but this was not the case. &lt;br /&gt;You NEED to set constrained=&amp;quot;true&amp;quot; on the mapping, basically going from this post I found: &lt;a href="http://www.hibernate.org/162.html#A5"&gt;http://www.hibernate.org/162.html#A5&lt;/a&gt;. Say we have A-&amp;gt;B where this is a 1-1 relationship,&lt;br /&gt;now
without a constraint from A-B this means A can exist without B, so
there is a possiblity that B is null, a Proxy to B will be not null and
won&amp;#39;t work here.&lt;br /&gt;&lt;br /&gt;But when we know A and B will always belong together it is ok to create a Proxy for B. Now my final mapping files looks like so:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;class name=&amp;quot;NHibernateDocumentTest.Document, NHibernateDocumentTest&amp;quot; table=&amp;quot;Documents&amp;quot; lazy=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;id name=&amp;quot;Id&amp;quot; column=&amp;quot;Id&amp;quot; type=&amp;quot;integer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generator class=&amp;quot;native&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&amp;quot;Name&amp;quot; column=&amp;quot;Name&amp;quot; type=&amp;quot;string&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;one-to-one name=&amp;quot;DocumentFile&amp;quot; cascade=&amp;quot;all-delete-orphan&amp;quot; lazy=&amp;quot;proxy&amp;quot; constrained=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;hibernate-mapping xmlns=&amp;quot;urn:nhibernate-mapping-2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;class name=&amp;quot;NHibernateDocumentTest.DocumentFile, NHibernateDocumentTest&amp;quot; table=&amp;quot;DocumentFiles&amp;quot; lazy=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;id name=&amp;quot;Id&amp;quot; column=&amp;quot;Id&amp;quot; type=&amp;quot;integer&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generator class=&amp;quot;foreign&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name=&amp;quot;property&amp;quot;&amp;gt;Document&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/generator&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/id&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name=&amp;quot;Data&amp;quot; column=&amp;quot;Data&amp;quot; type=&amp;quot;Byte[]&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;one-to-one name=&amp;quot;Document&amp;quot; fetch=&amp;quot;select&amp;quot; constrained=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/hibernate-mapping&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;Basically
the one-to-one in the Document has contraint for DocumentFile so these
always belong together as is the case here, also I have set lazy to
Proxy for this one-to-one. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And then we are done, this
works fine. So the trick is for a one-to-one to work with Lazy loading
you must have a constraint on your relationship. &lt;br /&gt;This can also be done with a Many-To-One where it is the case where A can exist without B.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks&lt;br /&gt;Stefan&lt;/p&gt;</description></item></channel></rss>
