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