<?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>NHibernate concurrency with Oracle's ORA_ROWSCN</title><link>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn.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>NHibernate concurrency with Oracle's ORA_ROWSCN</title><link>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn.aspx</link><pubDate>Wed, 03 Jun 2009 15:44:56 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:56</guid><dc:creator>JuanCho</dc:creator><comments>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/comments.aspx</comments><description>Current revision posted to How to by JuanCho on 03/06/2009 12:44:56 p.m.&lt;br /&gt;
&lt;h2&gt;NHibernate concurrency with Oracle&amp;#39;s ORA_ROWSCN&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: &lt;span style="background: SpringGreen;"&gt;Concurrency&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; Mapping, Nhibernate, Oracle, &lt;span style="text-decoration: line-through; color: red;"&gt;Concurrency&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;property&lt;/span&gt;, Version&lt;span style="text-decoration: line-through; color: red;"&gt;,&lt;/span&gt; &lt;span style="text-decoration: line-through; color: red;"&gt;property&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;I&amp;#39;m just starting to get my feet wet with NHibernate and one of the topics that popup here at the bar (you are thinking about NH when you have a couple of cold ones, aren&amp;#39;t you? [B] ) was if we could use something like sql server&amp;#39;s timestamp column to handle concurrency with NH and Oracle.&lt;/p&gt;
&lt;p&gt;SQL Server&amp;#39;s Timestamp column is not datetime as you might think, but an 8 byte binary that is changed any time that the row is updated.&lt;/p&gt;
&lt;p&gt;Back at the office, I started researching and it figures out that Oracle (v9 or greater) provides its own flavor of this feature: welcome to ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;Same concept, row gets updated, ORA_ROWSCN gets updated. Just make sure your tables are created with ROWDEPENDENCIES to guarantee a unique value per row, otherwise, it is possible more than one row will have the same ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;The idea is to leave the handling of this row version column to the DBMS instead of coding around via a trigger, sequences, custom column or having nhibernate resposible for increasing the value once it is done with it. As a bonus, external processes will be able to interact with the data and NH will be aware of any changes.&lt;/p&gt;
&lt;p&gt;This is a lot of prose for such little code, below are the configuration entries that your hbm files should have in order to use the version feature with NH.&lt;/p&gt;
&lt;p&gt;NH 2.0:&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size:10.0pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;column&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NH 2.1 (above syntax seems to also work with NH 2.1, this is just a variation)&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;column&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;sql-type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;/version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I hope this saves someone, a couple hours of googling.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 class="MsoNormal"&gt;&lt;span style="text-decoration:underline;"&gt;NOTE:&lt;/span&gt; The usage of ORA_ROWSCN will incur on an extra db call (SELECT ORA_ROWSCN...) during INSERTS/UPDATES since its value is updated on COMMIT. In Nhibernate, this means that after the entity was modified, the version property won&amp;#39;t have a valid value until a Flush() has been issued and a Refresh() has been performed.&lt;/h4&gt;
&lt;h4 class="MsoNormal"&gt;NH does a Refresh(), but it seems to do it &lt;span style="text-decoration: line-through; color: red;"&gt;(&lt;/span&gt;during &lt;span style="text-decoration: line-through; color: red;"&gt;Save()&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;before&lt;/span&gt; the Flush()&lt;span style="text-decoration: line-through; color: red;"&gt;(&lt;/span&gt;&lt;span style="text-decoration: line-through; color: red;"&gt;COMMIT),&lt;/span&gt; &amp;nbsp; &lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;before&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;COMMIT&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; forcing to explicitly call a Refresh() afterward.&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Some references:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="/blogs/nhibernate/archive/2009/04/15/nhibernate-mapping-concurrency.aspx#286"&gt;NHibernate Mapping - Concurrency&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:517105100346104196"&gt;&amp;quot;ORA_ROWSCN strange behavior&amp;quot;, version 10.2.0&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.rampant-books.com/10g_100.htm"&gt;Oracle10g Row Timestamp&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://pbarut.blogspot.com/2006/09/orarowscn-is-pseudo-column-that-gives.html"&gt;ORA_ROWSCN behavior: bug or feature?&lt;/a&gt;&lt;/p&gt;</description></item><item><title>NHibernate concurrency with Oracle's ORA_ROWSCN</title><link>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/revision/4.aspx</link><pubDate>Wed, 03 Jun 2009 13:08:32 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:281</guid><dc:creator>JuanCho</dc:creator><comments>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/comments.aspx</comments><description>Revision 4 posted to How to by JuanCho on 03/06/2009 10:08:32 a.m.&lt;br /&gt;
&lt;h2&gt;NHibernate concurrency with Oracle&amp;#39;s ORA_ROWSCN&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Mapping, Nhibernate, Oracle, Concurrency, Version, property&lt;/div&gt;

&lt;p&gt;I&amp;#39;m just starting to get my feet wet with NHibernate and one of the topics that popup here at the bar (you are thinking about NH when you have a couple of cold ones, aren&amp;#39;t you? [&lt;span style="text-decoration: line-through; color: red;"&gt;B])&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;B]&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt; was if we could use something like sql server&amp;#39;s timestamp column to handle concurrency with NH and Oracle.&lt;/p&gt;
&lt;p&gt;SQL Server&amp;#39;s Timestamp column is not datetime as you might think, but an 8 byte binary that is changed any time that the row is updated.&lt;/p&gt;
&lt;p&gt;Back at the office, I started researching and it figures out that Oracle (v9 or greater) provides its own flavor of this feature: welcome to ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;Same concept, row gets updated, ORA_ROWSCN gets updated. Just make sure your tables are created with ROWDEPENDENCIES to guarantee a unique value per row, otherwise, it is possible more than one row will have the same ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;The idea is to leave the handling of this row version column to the DBMS instead of coding around via a trigger, sequences, custom column or having nhibernate resposible for increasing the value once it is done with it. As a bonus, external processes will be able to interact with the data and NH will be aware of any changes.&lt;/p&gt;
&lt;p&gt;This is a lot of prose for such little code, below are the configuration entries that your hbm files should have in order to use the version feature with NH.&lt;/p&gt;
&lt;p&gt;NH 2.0:&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size:10.0pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;column&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NH 2.1 (above syntax seems to also work with NH 2.1, this is just a variation)&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;column&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;sql-type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;/version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I hope this saves someone, a couple hours of googling&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 class="MsoNormal"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="background: SpringGreen;"&gt;NOTE&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt;&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;The&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;usage&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;of&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;ORA_ROWSCN&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;will&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;incur&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;on&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;an&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;extra&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;db&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;call&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;SELECT&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;ORA_ROWSCN...&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;during&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;INSERTS/UPDATES&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;since&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;its&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;value&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;is&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;updated&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;on&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;COMMIT&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;Nhibernate&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;this&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;means&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;that&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;after&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;entity&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;was&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;modified&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;version&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;property&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;won&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;t&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;have&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;valid&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;value&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;until&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Flush(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;has&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;been&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;issued&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;and&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Refresh(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;has&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;been&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;performed&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;.&lt;/span&gt;&lt;/h4&gt;
&lt;h4 class="MsoNormal"&gt;&lt;span style="background: SpringGreen;"&gt;NH&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;does&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Refresh()&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;but&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;it&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;seems&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;do&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;it&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;during&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Save()&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;before&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;the&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Flush(&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;COMMIT),&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;forcing&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;to&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;explicitly&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;call&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;a&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;Refresh(&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;)&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;afterward&lt;/span&gt;.&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Some references:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="/blogs/nhibernate/archive/2009/04/15/nhibernate-mapping-concurrency.aspx#286"&gt;NHibernate Mapping - Concurrency&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:517105100346104196"&gt;&amp;quot;ORA_ROWSCN strange behavior&amp;quot;, version 10.2.0&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.rampant-books.com/10g_100.htm"&gt;Oracle10g Row Timestamp&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://pbarut.blogspot.com/2006/09/orarowscn-is-pseudo-column-that-gives.html"&gt;&lt;span style="background: SpringGreen;"&gt;ORA_ROWSCN&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;behavior&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;:&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;bug&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;or&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;feature&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>NHibernate concurrency with Oracle's ORA_ROWSCN</title><link>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/revision/3.aspx</link><pubDate>Wed, 29 Apr 2009 19:54:07 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:280</guid><dc:creator>JuanCho</dc:creator><comments>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/comments.aspx</comments><description>Revision 3 posted to How to by JuanCho on 29/04/2009 04:54:07 p.m.&lt;br /&gt;
&lt;h2&gt;NHibernate concurrency with Oracle&amp;#39;s ORA_ROWSCN&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: &lt;span style="background: SpringGreen;"&gt;Mapping&lt;/span&gt;&lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; Nhibernate, Oracle, Concurrency, Version&lt;span style="text-decoration: line-through; color: red;"&gt;mapping&lt;/span&gt; &lt;span style="background: SpringGreen;"&gt;,&lt;/span&gt; property&lt;/div&gt;

&lt;p&gt;I&amp;#39;m just starting to get my feet wet with NHibernate and one of the topics that popup here at the bar (you are thinking about NH when you have a couple of cold ones, aren&amp;#39;t you? [B]) was if we could use something like sql server&amp;#39;s timestamp column to handle concurrency with NH and Oracle.&lt;/p&gt;
&lt;p&gt;SQL Server&amp;#39;s Timestamp column is not datetime as you might think, but an 8 byte binary that is changed any time that the row is updated.&lt;/p&gt;
&lt;p&gt;Back at the office, I started researching and it figures out that Oracle (v9 or greater) provides its own flavor of this feature: welcome to ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;Same concept, row gets updated, ORA_ROWSCN gets updated. Just make sure your tables are created with ROWDEPENDENCIES to guarantee a unique value per row, otherwise, it is possible more than one row will have the same ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;The idea is to leave the handling of this row version column to the DBMS instead of coding around via a trigger, sequences, custom column or having nhibernate resposible for increasing the value once it is done with it. As a bonus, external processes will be able to interact with the data and NH will be aware of any changes.&lt;/p&gt;
&lt;p&gt;This is a lot of prose for such little code, below are the configuration entries that your hbm files should have in order to use the version feature with NH.&lt;/p&gt;
&lt;p&gt;NH 2.0:&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size:10.0pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;column&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NH 2.1 (above syntax seems to also work with NH 2.1, this is just a variation)&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;column&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;sql-type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;/version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I hope this saves someone, a couple hours of googling.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Some references:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="/blogs/nhibernate/archive/2009/04/15/nhibernate-mapping-concurrency.aspx#286"&gt;NHibernate Mapping - Concurrency&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:517105100346104196"&gt;&amp;quot;ORA_ROWSCN strange behavior&amp;quot;, version 10.2.0&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.rampant-books.com/10g_100.htm"&gt;Oracle10g Row Timestamp&lt;/a&gt;&lt;/p&gt;</description></item><item><title>NHibernate concurrency with Oracle's ORA_ROWSCN</title><link>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/revision/2.aspx</link><pubDate>Wed, 29 Apr 2009 19:54:07 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:262</guid><dc:creator>JuanCho</dc:creator><comments>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/comments.aspx</comments><description>Revision 2 posted to How to by JuanCho on 29/04/2009 04:54:07 p.m.&lt;br /&gt;
&lt;h2&gt;NHibernate concurrency with Oracle&amp;#39;s ORA_ROWSCN&lt;/h2&gt;
&lt;div style="font-size: 90%;"&gt;Filed under: Nhibernate, Oracle, Concurrency, Version mapping property&lt;/div&gt;

&lt;p&gt;I&amp;#39;m just starting to get my feet wet with NHibernate and one of the topics that popup here at the bar (you are thinking about NH when you have a couple of cold ones, aren&amp;#39;t you? [B]) was if we could use something like sql server&amp;#39;s timestamp column to handle concurrency with NH and Oracle.&lt;/p&gt;
&lt;p&gt;SQL Server&amp;#39;s Timestamp column is not datetime as you might think, but an 8 byte binary that is changed any time that the row is updated.&lt;/p&gt;
&lt;p&gt;Back at the office, I started researching and it figures out that Oracle (v9 or greater) provides its own flavor of this feature: welcome to ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;Same concept, row gets updated, ORA_ROWSCN gets updated. Just make sure your tables are created with ROWDEPENDENCIES to guarantee a unique value per row, otherwise, it is possible more than one row will have the same ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;The idea is to leave the handling of this row version column to the DBMS instead of coding around via a trigger, sequences, custom column or having nhibernate resposible for increasing the value once it is done with it. As a bonus, external processes will be able to interact with the data and NH will be aware of any changes.&lt;/p&gt;
&lt;p&gt;This is a lot of prose for such little code, below are the configuration entries that your hbm files should have in order to use the version feature with NH.&lt;/p&gt;
&lt;p&gt;NH 2.0:&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size:10.0pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;column&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NH 2.1 (above syntax seems to also work with NH 2.1, this is just a variation)&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;column&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;sql-type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;/version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I hope this saves someone, a couple hours of googling.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Some references:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="/blogs/nhibernate/archive/2009/04/15/nhibernate-mapping-concurrency.aspx#286"&gt;NHibernate Mapping - Concurrency&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:517105100346104196"&gt;&amp;quot;ORA_ROWSCN strange behavior&amp;quot;, version 10.2.0&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.rampant-books.com/10g_100.htm"&gt;Oracle10g Row Timestamp&lt;/a&gt;&lt;/p&gt;</description></item><item><title>NHibernate concurrency with Oracle's ORA_ROWSCN</title><link>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/revision/1.aspx</link><pubDate>Wed, 29 Apr 2009 19:51:27 GMT</pubDate><guid isPermaLink="false">45f813f2-f1c4-4eda-a619-288e3cadc793:260</guid><dc:creator>JuanCho</dc:creator><comments>http://nhforge.org/wikis/howtonh/nhibernate-concurrency-with-oracle-s-ora-rowscn/comments.aspx</comments><description>Revision 1 posted to How to by JuanCho on 29/04/2009 04:51:27 p.m.&lt;br /&gt;
&lt;p&gt;I&amp;#39;m just starting to get my feet wet with NHibernate and one of the topics that popup here at the bar (you are thinking about NH when you have a couple of cold ones, aren&amp;#39;t you? [B]) was if we could use something like sql server&amp;#39;s timestamp column to handle concurrency with NH and Oracle.&lt;/p&gt;
&lt;p&gt;SQL Server&amp;#39;s Timestamp column is not datetime as you might think, but an 8 byte binary that is changed any time that the row is updated.&lt;/p&gt;
&lt;p&gt;Back at the office, I started researching and it figures out that Oracle (v9 or greater) provides its own flavor of this feature: welcome to ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;Same concept, row gets updated, ORA_ROWSCN gets updated. Just make sure your tables are created with ROWDEPENDENCIES to guarantee a unique value per row, otherwise, it is possible more than one row will have the same ORA_ROWSCN.&lt;/p&gt;
&lt;p&gt;The idea is to leave the handling of this row version column to the DBMS instead of coding around via a trigger, sequences, custom column or having nhibernate resposible for increasing the value once it is done with it. As a bonus, external processes will be able to interact with the data and NH will be aware of any changes.&lt;/p&gt;
&lt;p&gt;This is a lot of prose for such little code, below are the configuration entries that your hbm files should have in order to use the version feature with NH.&lt;/p&gt;
&lt;p&gt;NH 2.0:&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size:10.0pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;column&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NH 2.1 (above syntax seems to also work with NH 2.1, this is just a variation)&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;_version&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;generated&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;always&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;access&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;field&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;unsaved-value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none;"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;column&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;ORA_ROWSCN&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;sql-type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Int64&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;o:p&amp;gt;&amp;lt;/o:p&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Envy Code R VS&amp;#39;;color:#a31515;"&gt;/version&lt;/span&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;"&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I hope this saves someone, a couple hours of googling.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Some references:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="/blogs/nhibernate/archive/2009/04/15/nhibernate-mapping-concurrency.aspx#286"&gt;NHibernate Mapping - Concurrency&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:517105100346104196"&gt;&amp;quot;ORA_ROWSCN strange behavior&amp;quot;, version 10.2.0&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.rampant-books.com/10g_100.htm"&gt;Oracle10g Row Timestamp&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>
