From: <fab...@us...> - 2008-08-18 19:58:39
|
Revision: 3719 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3719&view=rev Author: fabiomaulo Date: 2008-08-18 19:58:38 +0000 (Mon, 18 Aug 2008) Log Message: ----------- Delete Transients Test Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-2.0.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/Deletetransient/ trunk/nhibernate/src/NHibernate.Test/Deletetransient/Address.cs trunk/nhibernate/src/NHibernate.Test/Deletetransient/DeleteTransientEntityTest.cs trunk/nhibernate/src/NHibernate.Test/Deletetransient/Person.cs trunk/nhibernate/src/NHibernate.Test/Deletetransient/Person.hbm.xml Added: trunk/nhibernate/src/NHibernate.Test/Deletetransient/Address.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Deletetransient/Address.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Deletetransient/Address.cs 2008-08-18 19:58:38 UTC (rev 3719) @@ -0,0 +1,25 @@ +namespace NHibernate.Test.Deletetransient +{ + public class Address + { + private long id; + private string info; + public Address() {} + public Address(string info) + { + this.info = info; + } + + public virtual long Id + { + get { return id; } + set { id = value; } + } + + public virtual string Info + { + get { return info; } + set { info = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Deletetransient/DeleteTransientEntityTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Deletetransient/DeleteTransientEntityTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Deletetransient/DeleteTransientEntityTest.cs 2008-08-18 19:58:38 UTC (rev 3719) @@ -0,0 +1,111 @@ +using System.Collections; +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; + +namespace NHibernate.Test.Deletetransient +{ + [TestFixture] + public class DeleteTransientEntityTest : TestCase + { + protected override string MappingsAssembly + { + get { return "NHibernate.Test"; } + } + + protected override IList Mappings + { + get { return new string[] {"Deletetransient.Person.hbm.xml"}; } + } + + [Test] + public void TransientEntityDeletionNoCascades() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + s.Delete(new Address()); + t.Commit(); + s.Close(); + } + + [Test] + public void TransientEntityDeletionCascadingToTransientAssociation() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Person p = new Person(); + p.Addresses.Add(new Address()); + s.Delete(p); + t.Commit(); + s.Close(); + } + + [Test] + public void TransientEntityDeleteCascadingToCircularity() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Person p1 = new Person(); + Person p2 = new Person(); + p1.Friends.Add(p2); + p2.Friends.Add(p1); + s.Delete(p1); + t.Commit(); + s.Close(); + } + + [Test] + public void TransientEntityDeletionCascadingToDetachedAssociation() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Address address = new Address(); + address.Info = "123 Main St."; + s.Save(address); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + Person p = new Person(); + p.Addresses.Add(address); + s.Delete(p); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + long count = s.CreateQuery("select count(*) from Address").List<long>()[0]; + Assert.That(count, Is.EqualTo(0L), "delete not cascaded properly across transient entity"); + t.Commit(); + s.Close(); + } + + [Test] + public void TransientEntityDeletionCascadingToPersistentAssociation() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Address address = new Address(); + address.Info = "123 Main St."; + s.Save(address); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + address = s.Get<Address>(address.Id); + Person p = new Person(); + p.Addresses.Add(address); + s.Delete(p); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + long count = s.CreateQuery("select count(*) from Address").List<long>()[0]; + Assert.That(count, Is.EqualTo(0L), "delete not cascaded properly across transient entity"); + t.Commit(); + s.Close(); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Deletetransient/Person.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Deletetransient/Person.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Deletetransient/Person.cs 2008-08-18 19:58:38 UTC (rev 3719) @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using Iesi.Collections.Generic; + +namespace NHibernate.Test.Deletetransient +{ + public class Person + { + private long id; + private string name; + private ISet<Address> addresses = new HashedSet<Address>(); + private IList<Person> friends = new List<Person>(); + public Person() {} + public Person(string name) + { + this.name = name; + } + + public virtual long Id + { + get { return id; } + set { id = value; } + } + + public virtual string Name + { + get { return name; } + set { name = value; } + } + + public virtual ISet<Address> Addresses + { + get { return addresses; } + set { addresses = value; } + } + + public virtual IList<Person> Friends + { + get { return friends; } + set { friends = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Deletetransient/Person.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Deletetransient/Person.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Deletetransient/Person.hbm.xml 2008-08-18 19:58:38 UTC (rev 3719) @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.Deletetransient"> + + <class name="Person" table="T_PERSON"> + <id name="Id" type="long"> + <generator class="increment"/> + </id> + <property name="Name" type="string"/> + <set name="Addresses" lazy="true" inverse="false" cascade="all"> + <key column="PERSON_ID"/> + <one-to-many class="Address"/> + </set> + <bag name="Friends" lazy="true" inverse="false" cascade="all" table="T_FRIENDS"> + <key column="FRIEND_ID_1"/> + <many-to-many class="Person" column="FRIEND_ID_2"/> + </bag> + </class> + + <class name="Address" table="T_ADDRESS"> + <id name="Id" type="long"> + <generator class="increment"/> + </id> + <property name="Info" type="string"/> + </class> + +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-2.0.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-2.0.csproj 2008-08-18 19:12:18 UTC (rev 3718) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-2.0.csproj 2008-08-18 19:58:38 UTC (rev 3719) @@ -127,6 +127,9 @@ <Compile Include="Criteria\Student.cs" /> <Compile Include="Criteria\StudentDTO.cs" /> <Compile Include="DebugConnectionProvider.cs" /> + <Compile Include="Deletetransient\Address.cs" /> + <Compile Include="Deletetransient\DeleteTransientEntityTest.cs" /> + <Compile Include="Deletetransient\Person.cs" /> <Compile Include="DialectTest\DB2DialectFixture.cs" /> <Compile Include="DialectTest\DialectFixture.cs" /> <Compile Include="DialectTest\FirebirdDialectFixture.cs" /> @@ -1419,6 +1422,7 @@ <EmbeddedResource Include="CompositeId\Product.hbm.xml" /> <EmbeddedResource Include="Cascade\Job.hbm.xml" /> <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> + <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> <EmbeddedResource Include="Extralazy\UserGroup.hbm.xml" /> <EmbeddedResource Include="Naturalid\Immutable\User.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |