|
From: <fab...@us...> - 2011-03-24 20:38:30
|
Revision: 5523
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5523&view=rev
Author: fabiomaulo
Date: 2011-03-24 20:38:23 +0000 (Thu, 24 Mar 2011)
Log Message:
-----------
NH-1323 no viable
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/CheckViability.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/Domain.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/Mappings.hbm.xml
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/CheckViability.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/CheckViability.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/CheckViability.cs 2011-03-24 20:38:23 UTC (rev 5523)
@@ -0,0 +1,202 @@
+using System;
+using NHibernate.Collection;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.NHSpecificTest.NH1323
+{
+ [Explicit("Demonstration of not viability")]
+ public class CheckViability: BugTestCase
+ {
+ public class FullInitializedRetrievedEntity : IDisposable
+ {
+ private readonly ISessionFactory factory;
+ private readonly MyClass entity;
+
+ public FullInitializedRetrievedEntity(ISessionFactory factory)
+ {
+ this.factory = factory;
+ object savedId;
+ using (var session = factory.OpenSession())
+ using (session.BeginTransaction())
+ {
+ var entity = new MyClass();
+ entity.Children.Add(new MyChild { Parent = entity });
+ entity.Components.Add(new MyComponent { Something = "something" });
+ entity.Elements.Add("somethingelse");
+ savedId = session.Save(entity);
+ session.Transaction.Commit();
+ }
+
+ using (var session = factory.OpenSession())
+ using (session.BeginTransaction())
+ {
+ entity = session.Get<MyClass>(savedId);
+ NHibernateUtil.Initialize(entity.Children);
+ NHibernateUtil.Initialize(entity.Components);
+ NHibernateUtil.Initialize(entity.Elements);
+ session.Transaction.Commit();
+ }
+ }
+
+ public MyClass Entity
+ {
+ get { return entity; }
+ }
+
+ public void Dispose()
+ {
+ using (var s = factory.OpenSession())
+ {
+ s.Delete("from MyClass");
+ s.Flush();
+ }
+ }
+ }
+
+ [Test]
+ public void WhenReassociateCollectionUsingMergeThenReassingOwner()
+ {
+ using (var scenario = new FullInitializedRetrievedEntity(Sfi))
+ {
+ ((IPersistentCollection)scenario.Entity.Children).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Components).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Elements).Owner = null;
+
+ // When I reassociate the collections the Owner has value
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ var merged = (MyClass)session.Merge(scenario.Entity);
+ ((IPersistentCollection)merged.Children).Owner.Should().Not.Be.Null();
+ ((IPersistentCollection)merged.Components).Owner.Should().Not.Be.Null();
+ ((IPersistentCollection)merged.Elements).Owner.Should().Not.Be.Null();
+ session.Transaction.Commit();
+ }
+ }
+ }
+
+ [Test]
+ public void WhenReassociateCollectionUsingLockThenTheCommitNotThrows()
+ {
+ using (var scenario = new FullInitializedRetrievedEntity(Sfi))
+ {
+ ((IPersistentCollection)scenario.Entity.Children).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Components).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Elements).Owner = null;
+
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ // When I reassociate the collections the Owner is null
+ session.Lock(scenario.Entity, LockMode.None);
+ // If I change something in each collection, there is no problems
+ scenario.Entity.Children.Add(new MyChild { Parent = scenario.Entity });
+ scenario.Entity.Components.Add(new MyComponent { Something = "something" });
+ scenario.Entity.Elements.Add("somethingelse");
+ session.Transaction.Commit();
+ }
+
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ var fresh = session.Get<MyClass>(scenario.Entity.Id);
+ fresh.Children.Should().Have.Count.EqualTo(2);
+ fresh.Components.Should().Have.Count.EqualTo(2);
+ fresh.Elements.Should().Have.Count.EqualTo(2);
+ session.Transaction.Commit();
+ }
+ }
+ }
+
+ [Test]
+ public void WhenReassociateCollectionUsingUpdateThenTheCommitNotThrows()
+ {
+ using (var scenario = new FullInitializedRetrievedEntity(Sfi))
+ {
+ ((IPersistentCollection)scenario.Entity.Children).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Components).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Elements).Owner = null;
+
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ scenario.Entity.Children.Add(new MyChild { Parent = scenario.Entity });
+ scenario.Entity.Components.Add(new MyComponent { Something = "something" });
+ scenario.Entity.Elements.Add("somethingelse");
+ // When I reassociate the collections the Owner is null
+ session.Update(scenario.Entity);
+ session.Transaction.Commit();
+ }
+
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ var fresh = session.Get<MyClass>(scenario.Entity.Id);
+ fresh.Children.Should().Have.Count.EqualTo(2);
+ fresh.Components.Should().Have.Count.EqualTo(2);
+ fresh.Elements.Should().Have.Count.EqualTo(2);
+ session.Transaction.Commit();
+ }
+ }
+ }
+
+ [Test]
+ public void WhenReassociateCollectionUsingSaveOrUpdateThenTheCommitNotThrows()
+ {
+ using (var scenario = new FullInitializedRetrievedEntity(Sfi))
+ {
+ ((IPersistentCollection)scenario.Entity.Children).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Components).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Elements).Owner = null;
+
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ scenario.Entity.Children.Add(new MyChild { Parent = scenario.Entity });
+ scenario.Entity.Components.Add(new MyComponent { Something = "something" });
+ scenario.Entity.Elements.Add("somethingelse");
+ // When I reassociate the collections the Owner is null
+ session.SaveOrUpdate(scenario.Entity);
+ session.Transaction.Commit();
+ }
+
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ var fresh = session.Get<MyClass>(scenario.Entity.Id);
+ fresh.Children.Should().Have.Count.EqualTo(2);
+ fresh.Components.Should().Have.Count.EqualTo(2);
+ fresh.Elements.Should().Have.Count.EqualTo(2);
+ session.Transaction.Commit();
+ }
+ }
+ }
+
+ [Test]
+ public void WhenReassociateCollectionUsingDeleteThenTheCommitNotThrows()
+ {
+ using (var scenario = new FullInitializedRetrievedEntity(Sfi))
+ {
+ ((IPersistentCollection)scenario.Entity.Children).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Components).Owner = null;
+ ((IPersistentCollection)scenario.Entity.Elements).Owner = null;
+
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ session.Delete(scenario.Entity);
+ session.Transaction.Commit();
+ }
+
+ using (var session = OpenSession())
+ using (session.BeginTransaction())
+ {
+ var fresh = session.Get<MyClass>(scenario.Entity.Id);
+ fresh.Should().Be.Null();
+ session.Transaction.Commit();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/Domain.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/Domain.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/Domain.cs 2011-03-24 20:38:23 UTC (rev 5523)
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.NH1323
+{
+ [Serializable]
+ public class MyClass
+ {
+ public MyClass()
+ {
+ Children = new List<MyChild>();
+ Components = new List<MyComponent>();
+ Elements = new List<string>();
+ }
+ public virtual string Description { get; set; }
+ public virtual Guid Id { get; set; }
+ public virtual IList<MyChild> Children { get; set; }
+ public virtual IList<MyComponent> Components { get; set; }
+ public virtual IList<string> Elements { get; set; }
+ }
+
+ [Serializable]
+ public class MyChild
+ {
+ public virtual Guid Id { get; set; }
+ public virtual MyClass Parent { get; set; }
+ }
+
+ [Serializable]
+ public class MyComponent
+ {
+ public virtual string Something { get; set; }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1323/Mappings.hbm.xml 2011-03-24 20:38:23 UTC (rev 5523)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:nhibernate-mapping-2.2"
+ namespace="NHibernate.Test.NHSpecificTest.NH1323"
+ assembly="NHibernate.Test">
+ <class name="MyClass">
+ <id name="Id" type="Guid">
+ <generator class="guid.comb" />
+ </id>
+ <property name="Description" />
+ <bag name="Children" inverse="true" cascade="all,delete-orphan">
+ <key column="ParentId" on-delete="cascade" />
+ <one-to-many class="MyChild" />
+ </bag>
+ <bag name="Components" table="MyClassComponents">
+ <key column="MyClassId" />
+ <composite-element class="MyComponent">
+ <property name="Something" />
+ </composite-element>
+ </bag>
+ <bag name="Elements" table="MyClassElements">
+ <key column="MyClassId" />
+ <element column="ElementsElement" type="String" />
+ </bag>
+ </class>
+ <class name="MyChild">
+ <id name="Id" type="Guid">
+ <generator class="guid.comb" />
+ </id>
+ <many-to-one name="Parent" column="ParentId" />
+ </class>
+</hibernate-mapping>
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-24 18:47:41 UTC (rev 5522)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-24 20:38:23 UTC (rev 5523)
@@ -524,6 +524,8 @@
<Compile Include="NHSpecificTest\NH1136\Person.cs" />
<Compile Include="NHSpecificTest\NH1136\ReverseSortComparer.cs" />
<Compile Include="NHSpecificTest\NH1136\TemporalAddressType.cs" />
+ <Compile Include="NHSpecificTest\NH1323\CheckViability.cs" />
+ <Compile Include="NHSpecificTest\NH1323\Domain.cs" />
<Compile Include="NHSpecificTest\NH1421\AnEntity.cs" />
<Compile Include="NHSpecificTest\NH1421\Fixture.cs" />
<Compile Include="NHSpecificTest\NH1836\Entity.cs" />
@@ -2484,6 +2486,7 @@
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\NH1323\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2580\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2390\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2491\Mappings.hbm.xml" />
@@ -2879,7 +2882,6 @@
<EmbeddedResource Include="DynamicEntity\Tuplizer\Customer.hbm.xml" />
</ItemGroup>
<ItemGroup>
- <Folder Include="NHSpecificTest\NH2554" />
<Folder Include="Properties\" />
</ItemGroup>
<ItemGroup>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|