|
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.
|