From: <fab...@us...> - 2009-05-20 15:50:21
|
Revision: 4350 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4350&view=rev Author: fabiomaulo Date: 2009-05-20 15:50:11 +0000 (Wed, 20 May 2009) Log Message: ----------- Fix NH-1756 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Event/Default/DefaultFlushEntityEventListener.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Domain.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Event/Default/DefaultFlushEntityEventListener.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/Default/DefaultFlushEntityEventListener.cs 2009-05-19 12:59:37 UTC (rev 4349) +++ trunk/nhibernate/src/NHibernate/Event/Default/DefaultFlushEntityEventListener.cs 2009-05-20 15:50:11 UTC (rev 4350) @@ -345,8 +345,12 @@ private bool IsVersionIncrementRequired(FlushEntityEvent @event, EntityEntry entry, IEntityPersister persister, int[] dirtyProperties) { - bool isVersionIncrementRequired = - entry.Status != Status.Deleted && + // NH different behavior: because NH-1756 when PostInsertId is used with a generated version + // the version is read inmediately after save and does not need to be incremented. + // BTW, in general, a generated version does not need to be incremented by NH. + + bool isVersionIncrementRequired = + entry.Status != Status.Deleted && !persister.IsVersionPropertyGenerated && (dirtyProperties == null || Versioning.IsVersionIncrementRequired(dirtyProperties, @event.HasDirtyCollection, persister.PropertyVersionability)); return isVersionIncrementRequired; Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Domain.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Domain.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Domain.cs 2009-05-20 15:50:11 UTC (rev 4350) @@ -0,0 +1,43 @@ + +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH1756 +{ + + public class Book + { + private DateTime _version; + + public virtual DateTime Version + { + get { return _version; } + set { _version = value; } + } + + public virtual int Id { get; set; } + public virtual string Name { get; set; } + public virtual IList<Page> Pages { get; set; } + } + + public class Page + { + public virtual int Id { get; set; } + } + + public class BookNotGenerated + { + private DateTime _version; + + public virtual DateTime Version + { + get { return _version; } + set { _version = value; } + } + + public virtual int Id { get; set; } + public virtual string Name { get; set; } + public virtual IList<Page> Pages { get; set; } + } + +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Fixture.cs 2009-05-20 15:50:11 UTC (rev 4350) @@ -0,0 +1,86 @@ +using System.Collections.Generic; +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1756 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is MsSql2000Dialect; + } + + [Test] + public void SaveTransient_Then_Update_Ok() + { + using (ISession session = OpenSession()) + { + using (ITransaction transaction = session.BeginTransaction()) + { + var book = new BookNotGenerated {Name = "test book", Pages = new List<Page>(),}; + session.Save(book); + book.Name = "modified test book"; + transaction.Commit(); + } + } + using (ISession session = OpenSession()) + { + using (ITransaction transaction = session.BeginTransaction()) + { + session.CreateQuery("delete from BookNotGenerated").ExecuteUpdate(); + transaction.Commit(); + } + } + } + + [Test] + [Description("Work with AutoFlush on commit")] + public void SaveTransient_Then_Update() + { + using (ISession session = OpenSession()) + { + using (ITransaction transaction = session.BeginTransaction()) + { + var book = new Book { Name = "test book", Pages = new List<Page>(), }; + session.Save(book); + book.Name = "modified test book"; + transaction.Commit(); + } + } + using (ISession session = OpenSession()) + { + using (ITransaction transaction = session.BeginTransaction()) + { + session.CreateQuery("delete from Book").ExecuteUpdate(); + transaction.Commit(); + } + } + } + + [Test] + public void SaveTransient_Then_Update_Bug() + { + using (ISession session = OpenSession()) + { + using (ITransaction transaction = session.BeginTransaction()) + { + var book = new Book {Name = "test book", Pages = new List<Page>(),}; + session.Save(book); + book.Name = "modified test book"; + session.Flush(); + transaction.Commit(); + } + } + using (ISession session = OpenSession()) + { + using (ITransaction transaction = session.BeginTransaction()) + { + session.CreateQuery("delete from Book").ExecuteUpdate(); + transaction.Commit(); + } + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1756/Mappings.hbm.xml 2009-05-20 15:50:11 UTC (rev 4350) @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.NH1756" + assembly="NHibernate.Test"> + + <class name="Book" table="book"> + + <id name="Id" column="id"> + <generator class="identity"/> + </id> + + <discriminator column="subclass" /> + + <version name="Version" column="version_column" type="Timestamp" generated="always" /> + <property name="Name" column="name_column" /> + + <bag name="Pages"> + <key column="book_id" /> + <one-to-many class="Page"/> + </bag> + + </class> + + <class name="Page"> + + <id name="Id"> + <generator class="identity"/> + </id> + + </class> + + <class name="BookNotGenerated"> + + <id name="Id" column="id"> + <generator class="identity"/> + </id> + + <discriminator column="subclass" /> + + <version name="Version" column="version_column" type="Timestamp" generated="never" /> + <property name="Name" column="name_column" /> + + <bag name="Pages"> + <key column="book_id" /> + <one-to-many class="Page"/> + </bag> + + </class> + + <database-object> + <create> + <![CDATA[ +CREATE TRIGGER t_book ON book +INSTEAD OF INSERT +AS +BEGIN + SET NOCOUNT ON + + INSERT INTO book ( + [subclass], + [version_column], + [name_column]) + SELECT + [subclass], + GetDate(), + [name_column] + FROM inserted + + SELECT scope_identity(); +END +]]> + </create> + <drop> + <![CDATA[ +IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[t_sack]')) +DROP TRIGGER [dbo].[t_sack] +]]> + </drop> + <dialect-scope name="NHibernate.Dialect.MsSql2005Dialect"/> + <dialect-scope name="NHibernate.Dialect.MsSql2008Dialect"/> + </database-object> + +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-05-19 12:59:37 UTC (rev 4349) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-05-20 15:50:11 UTC (rev 4350) @@ -416,6 +416,8 @@ <Compile Include="NHSpecificTest\NH1742\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1747\Classes.cs" /> <Compile Include="NHSpecificTest\NH1747\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1756\Domain.cs" /> + <Compile Include="NHSpecificTest\NH1756\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1760\DomainClass.cs" /> <Compile Include="NHSpecificTest\NH1760\SampleTest.cs" /> <Compile Include="NHSpecificTest\NH1763\DomainClass.cs" /> @@ -1821,6 +1823,7 @@ <EmbeddedResource Include="BulkManipulation\SimpleClass.hbm.xml" /> <EmbeddedResource Include="Ado\VerySimple.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1756\Mappings.hbm.xml" /> <EmbeddedResource Include="LazyProperty\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1783\Mappings.hbm.xml" /> <EmbeddedResource Include="LazyOneToOne\Person.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |