From: <fab...@us...> - 2009-03-18 14:22:41
|
Revision: 4144 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4144&view=rev Author: fabiomaulo Date: 2009-03-18 13:30:33 +0000 (Wed, 18 Mar 2009) Log Message: ----------- Test to study the StatelessSession behavior in "more complicated" scenario. Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/Stateless/Naturalness.cs trunk/nhibernate/src/NHibernate.Test/Stateless/Naturalness.hbm.xml trunk/nhibernate/src/NHibernate.Test/Stateless/StatelessWithRelationsFixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-17 19:16:01 UTC (rev 4143) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-18 13:30:33 UTC (rev 4144) @@ -948,6 +948,8 @@ <Compile Include="SqlTest\Custom\CustomStoredProcSupportTest.cs" /> <Compile Include="SqlTest\Custom\MySQL\MySQLTest.cs" /> <Compile Include="SqlTest\Custom\Oracle\OracleCustomSQLFixture.cs" /> + <Compile Include="Stateless\Naturalness.cs" /> + <Compile Include="Stateless\StatelessWithRelationsFixture.cs" /> <Compile Include="Tools\hbm2ddl\SchemaExportTests\WithColumnTag.cs" /> <Compile Include="Tools\hbm2ddl\SchemaExportTests\WithColumnTagFixture.cs" /> <Compile Include="Tools\hbm2ddl\SchemaUpdate\MigrationFixture.cs" /> @@ -1681,6 +1683,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="Stateless\Naturalness.hbm.xml" /> <EmbeddedResource Include="TransformTests\Simple.hbm.xml" /> <EmbeddedResource Include="VersionTest\Db\MsSQL\ComplexVersioned.hbm.xml" /> <EmbeddedResource Include="Tools\hbm2ddl\SchemaExportTests\WithColumnTag.hbm.xml" /> Added: trunk/nhibernate/src/NHibernate.Test/Stateless/Naturalness.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Stateless/Naturalness.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Stateless/Naturalness.cs 2009-03-18 13:30:33 UTC (rev 4144) @@ -0,0 +1,37 @@ +using System; +using Iesi.Collections.Generic; + +namespace NHibernate.Test.Stateless +{ + public abstract class Animal + { + public virtual int Id { get; private set; } + public virtual string Description { get; set; } + } + + public class Reptile: Animal + { + public virtual float BodyTemperature { get; set; } + } + + public class Human : Animal + { + public virtual string Name { get; set; } + public virtual string NickName { get; set; } + public virtual DateTime Birthdate { get; set; } + } + + public class Family<T> where T: Animal + { + private ISet<T> childs; + + public virtual int Id { get; private set; } + public virtual T Father { get; set; } + public virtual T Mother { get; set; } + public virtual ISet<T> Childs + { + get { return childs; } + set { childs = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Stateless/Naturalness.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Stateless/Naturalness.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Stateless/Naturalness.hbm.xml 2009-03-18 13:30:33 UTC (rev 4144) @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.Stateless" + default-access="backfield" + default-lazy="false"> + + <class name="Animal" abstract="true"> + <id name="Id"> + <generator class="hilo"/> + </id> + <discriminator column="kind"/> + <property name="Description"/> + + <subclass name="Reptile"> + <property name="BodyTemperature"/> + </subclass> + + <subclass name="Human"> + <property name="Name"/> + <property name="NickName"/> + <property name="Birthdate" type="Date"/> + </subclass> + </class> + + <class name="Family`1[[Reptile]]" entity-name="ReptilesFamily" + table="Families" discriminator-value="Reptile" where="familyKind = 'Reptile'"> + <id name="Id"> + <generator class="hilo"/> + </id> + <discriminator column="familyKind"/> + <many-to-one name="Father" class="Reptile" cascade="all"/> + <many-to-one name="Mother" class="Reptile" cascade="all"/> + <set name="Childs" cascade="all" access="property"> + <key column="familyId"/> + <one-to-many class="Reptile"/> + </set> + </class> + + <class name="Family`1[[Human]]" entity-name="HumanFamily" + table="Families" discriminator-value="Human" where="familyKind = 'Human'"> + <id name="Id"> + <generator class="hilo"/> + </id> + <discriminator column="familyKind"/> + <many-to-one name="Father" class="Human" cascade="all"/> + <many-to-one name="Mother" class="Human" cascade="all"/> + <set name="Childs" cascade="all" access="property"> + <key column="familyId"/> + <one-to-many class="Human"/> + </set> + </class> +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/Stateless/StatelessWithRelationsFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Stateless/StatelessWithRelationsFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Stateless/StatelessWithRelationsFixture.cs 2009-03-18 13:30:33 UTC (rev 4144) @@ -0,0 +1,91 @@ +using System.Collections; +using Iesi.Collections.Generic; +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; +using System.Collections.Generic; + +namespace NHibernate.Test.Stateless +{ + [TestFixture] + public class StatelessWithRelationsFixture : TestCase + { + protected override string MappingsAssembly + { + get { return "NHibernate.Test"; } + } + + protected override IList Mappings + { + get { return new[] { "Stateless.Naturalness.hbm.xml" }; } + } + + [Test] + public void ShouldWorkLoadingComplexEntities() + { + const string crocodileFather = "Crocodile father"; + const string crocodileMother = "Crocodile mother"; + + using (ISession s = sessions.OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + var rf = new Reptile { Description = crocodileFather }; + var rm = new Reptile { Description = crocodileMother }; + var rc1 = new Reptile { Description = "Crocodile" }; + var rc2 = new Reptile { Description = "Crocodile" }; + var rfamily = new Family<Reptile> + { + Father = rf, + Mother = rm, + Childs = new HashedSet<Reptile> { rc1, rc2 } + }; + s.Save("ReptilesFamily", rfamily); + tx.Commit(); + } + + const string humanFather = "Fred"; + const string humanMother = "Wilma"; + using (ISession s = sessions.OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + var hf = new Human { Description = "Flinstone", Name = humanFather }; + var hm = new Human { Description = "Flinstone", Name = humanMother }; + var hc1 = new Human { Description = "Flinstone", Name = "Pebbles" }; + var hfamily = new Family<Human> + { + Father = hf, + Mother = hm, + Childs = new HashedSet<Human> { hc1 } + }; + s.Save("HumanFamily", hfamily); + tx.Commit(); + } + + using (IStatelessSession s = sessions.OpenStatelessSession()) + using (ITransaction tx = s.BeginTransaction()) + { + IList<Family<Human>> hf = s.CreateQuery("from HumanFamily").List<Family<Human>>(); + Assert.That(hf.Count, Is.EqualTo(1)); + Assert.That(hf[0].Father.Name, Is.EqualTo(humanFather)); + Assert.That(hf[0].Mother.Name, Is.EqualTo(humanMother)); + Assert.That(hf[0].Childs, Is.Null, "Collections should be ignored by stateless session."); + + IList<Family<Reptile>> rf = s.CreateQuery("from ReptilesFamily").List<Family<Reptile>>(); + Assert.That(rf.Count, Is.EqualTo(1)); + Assert.That(rf[0].Father.Description, Is.EqualTo(crocodileFather)); + Assert.That(rf[0].Mother.Description, Is.EqualTo(crocodileMother)); + Assert.That(rf[0].Childs, Is.Null, "Collections should be ignored by stateless session."); + + tx.Commit(); + } + + using (ISession s = sessions.OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + s.Delete("from HumanFamily"); + s.Delete("from ReptilesFamily"); + tx.Commit(); + } + } + + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |