From: <fab...@us...> - 2010-12-11 18:39:54
|
Revision: 5307 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5307&view=rev Author: fabiomaulo Date: 2010-12-11 18:39:48 +0000 (Sat, 11 Dec 2010) Log Message: ----------- Fix NH-2386 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Organisation.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/ResponsibleLegalPerson.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Test.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/TradingName.cs Modified: trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2010-12-11 15:44:12 UTC (rev 5306) +++ trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2010-12-11 18:39:48 UTC (rev 5307) @@ -1128,9 +1128,14 @@ } if (IsVersioned) { - tableUpdateNeeded[0] = tableUpdateNeeded[0] || - Versioning.IsVersionIncrementRequired(dirtyProperties, hasDirtyCollection, - PropertyVersionability); + // NH-2386 when there isn't dirty-properties and the version is generated even in UPDATE + // we can't execute an UPDATE because there isn't something to UPDATE + if(!entityMetamodel.VersionProperty.IsUpdateGenerated) + { + tableUpdateNeeded[0] = tableUpdateNeeded[0] || + Versioning.IsVersionIncrementRequired(dirtyProperties, hasDirtyCollection, + PropertyVersionability); + } } return tableUpdateNeeded; } Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Mappings.hbm.xml 2010-12-11 18:39:48 UTC (rev 5307) @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" namespace="NHibernate.Test.NHSpecificTest.NH2386"> + <class name="Organisation" abstract ="false" table="tblTrnOrganisation"> + <id name="OrganisationId"> + <generator class="guid"></generator> + </id> + + <version name="RowVersion" type="BinaryBlob" generated="always" unsaved-value="null"> + <column name="RVersion" sql-type="timestamp"/> + </version> + + <set name="ResponsibleLegalPersons" table="tblTrnRtoResponsibleLegalPerson" cascade="all-delete-orphan" fetch="join" lazy="false"> + <key column="OrganisationId"></key> + <one-to-many class="ResponsibleLegalPerson"/> + </set> + + <set name="TradingNames" table="tblTrnOrganisationTradingName" cascade="all-delete-orphan" lazy="true" batch-size="10" inverse="true"> + <key column="OrganisationId"></key> + <one-to-many class="TradingName"/> + </set> + + + </class> + + <class name="TradingName" abstract="false" table="tblTrnOrganisationTradingName" dynamic-insert="true" dynamic-update="true"> + <id name="TradingNameId" type="guid" column="TradingNameId"> + <generator class="guid"></generator> + </id> + <many-to-one name="Organisation" column="OrganisationId" class="Organisation" not-null="true"/> + <property name="Name" column="TradingName" length="300" not-null="true"/> + <property name="StartDate" column="TradingNameStartDate"/> + <property name="EndDate" column="TradingNameEndDate"/> + </class> + + <class name="ResponsibleLegalPerson" table="tblTrnRtoResponsibleLegalPerson" dynamic-insert="true" dynamic-update="true" > + <id name="ResponsibleLegalPersonId" column="ResponsibleLegalPersonId"> + <generator class="guid"></generator> + </id> + + <many-to-one name="Organisation" column="OrganisationId" class="Organisation" not-null="true"/> + <property name="StartDate" column="ResponsibleLegalPersonStartDate" not-null="true"/> + <property name="EndDate" column="ResponsibleLegalPersonEndDate"/> + <property name="Name" column="ResponsibleLegalPersonName" not-null="true"/> + <property name="Abn" length="11"/> + <property name="Acn" length="9"/> + </class> + + +</hibernate-mapping> + Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Organisation.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Organisation.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Organisation.cs 2010-12-11 18:39:48 UTC (rev 5307) @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Iesi.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH2386 +{ + public class Organisation + { + //internal to TGA + //private int organisationId; + public virtual Guid OrganisationId { get; set; } + private ISet<TradingName> tradingNames; + private ISet<ResponsibleLegalPerson> responsibleLegalPersons; + + /// <summary> + /// + /// </summary> + + + public virtual ISet<ResponsibleLegalPerson> ResponsibleLegalPersons { + get { + if (responsibleLegalPersons == null) { + responsibleLegalPersons = new HashedSet<ResponsibleLegalPerson>(); + } + return responsibleLegalPersons; + } + protected set { + responsibleLegalPersons = value; + + } + } + + public virtual ISet<TradingName> TradingNames { + get { + if (tradingNames == null) { + tradingNames = new HashedSet<TradingName>(); + } + return tradingNames; + } + protected set { + tradingNames = value; + + } + } + + protected internal virtual byte[] RowVersion { get; protected set; } + + } + +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/ResponsibleLegalPerson.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/ResponsibleLegalPerson.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/ResponsibleLegalPerson.cs 2010-12-11 18:39:48 UTC (rev 5307) @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace NHibernate.Test.NHSpecificTest.NH2386 +{ + [Serializable] + public class ResponsibleLegalPerson { + private Guid responsibleLegalPersonId; + private Organisation organisation; + //private DateTime startDate; + + protected ResponsibleLegalPerson() {} + + public ResponsibleLegalPerson(Organisation organisation) { + if (organisation == null) { + throw new ArgumentNullException("organisation"); + } + + this.organisation = organisation; + } + + public virtual Guid ResponsibleLegalPersonId { + get { return responsibleLegalPersonId; } + protected set { responsibleLegalPersonId = value; } + } + + + public virtual Organisation Organisation { + get { return organisation; } + protected set { organisation = value; } + } + + public virtual DateTime StartDate { get; set; } + public virtual DateTime? EndDate { get; set; } + public virtual string Abn { get; set; } + public virtual string Acn { get; set; } + + public virtual string Name { get; set; } + + public override int GetHashCode() { + return responsibleLegalPersonId.GetHashCode(); + } + + public override bool Equals(object obj) { + ResponsibleLegalPerson other = obj as ResponsibleLegalPerson; + if (other == null) { + return false; + } + + if (responsibleLegalPersonId == Guid.Empty) { + return object.ReferenceEquals(this, other); + } + return this.responsibleLegalPersonId == other.responsibleLegalPersonId; + } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Test.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Test.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/Test.cs 2010-12-11 18:39:48 UTC (rev 5307) @@ -0,0 +1,44 @@ +using System; +using log4net; +using log4net.Appender; +using log4net.Repository.Hierarchy; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2386 { + [TestFixture] + public class Test : BugTestCase { + private MemoryAppender memoryAppender; + + + protected override void OnTearDown() { + if (memoryAppender != null) { + var repository = (Hierarchy) LogManager.GetRepository(); + repository.Root.RemoveAppender(memoryAppender); + memoryAppender = null; + } + base.OnTearDown(); + } + + [Test] + public void TheTest() { + using (ISession session = OpenSession()) { + var organisation = new Organisation(); + session.SaveOrUpdate(organisation); + session.Flush(); + + organisation.TradingNames.Add(new TradingName(organisation) + {Name = "Trading Name", StartDate = DateTime.Today}); + + session.SaveOrUpdate(organisation); + + //this line below fails + //AbstractBatcher:0 - Could not execute command: UPDATE tblTrnOrganisation SET WHERE OrganisationId = @p0 AND RVersion = @p1 + //System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'WHERE'. + session.Flush(); + + session.Delete(organisation); + session.Flush(); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/TradingName.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/TradingName.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2386/TradingName.cs 2010-12-11 18:39:48 UTC (rev 5307) @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NHibernate.Test.NHSpecificTest.NH2386 +{ + /// <summary> + /// represents a trading name for an organisation + /// </summary> + public class TradingName { + private Organisation organisation; + + public virtual Guid TradingNameId { get; protected set;} + + + public TradingName(Organisation organisation) { + if (organisation == null) { + throw new ArgumentNullException("organisation"); + } + this.organisation = organisation; + } + + protected TradingName() {} + + public virtual string Name { get; set; } + + public virtual Organisation Organisation { + get { return organisation; } + protected set { organisation = value; } + } + + public virtual DateTime StartDate { get; set; } + + public virtual DateTime? EndDate { get; set; } + + private bool ShouldSerializeEndDate() { + return EndDate.HasValue; + } + + public override string ToString() { + return Name; + } + + } + + +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-11 15:44:12 UTC (rev 5306) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-11 18:39:48 UTC (rev 5307) @@ -521,6 +521,10 @@ <Compile Include="NHSpecificTest\NH2378\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2378\TestEntity.cs" /> <Compile Include="NHSpecificTest\NH2378\TestEntityDto.cs" /> + <Compile Include="NHSpecificTest\NH2386\Organisation.cs" /> + <Compile Include="NHSpecificTest\NH2386\ResponsibleLegalPerson.cs" /> + <Compile Include="NHSpecificTest\NH2386\Test.cs" /> + <Compile Include="NHSpecificTest\NH2386\TradingName.cs" /> <Compile Include="NHSpecificTest\NH2392\A.cs" /> <Compile Include="NHSpecificTest\NH2392\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2392\PhoneNumber.cs" /> @@ -2351,6 +2355,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2386\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\Properties\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2378\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\XDocClass.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |