|
From: <aye...@us...> - 2010-03-03 15:54:42
|
Revision: 4951
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4951&view=rev
Author: ayenderahien
Date: 2010-03-03 15:54:34 +0000 (Wed, 03 Mar 2010)
Log Message:
-----------
Fixing NH-2113
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Type/ComponentType.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Model.cs
Modified: trunk/nhibernate/src/NHibernate/Type/ComponentType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/ComponentType.cs 2010-03-02 20:55:46 UTC (rev 4950)
+++ trunk/nhibernate/src/NHibernate/Type/ComponentType.cs 2010-03-03 15:54:34 UTC (rev 4951)
@@ -23,8 +23,9 @@
private readonly FetchMode?[] joinedFetch;
private readonly bool isKey;
protected internal EntityModeToTuplizerMapping tuplizerMapping;
+ private bool overridesGetHashCode;
- public override SqlType[] SqlTypes(IMapping mapping)
+ public override SqlType[] SqlTypes(IMapping mapping)
{
//Not called at runtime so doesn't matter if its slow :)
SqlType[] sqlTypes = new SqlType[GetColumnSpan(mapping)];
@@ -72,6 +73,11 @@
}
tuplizerMapping = metamodel.TuplizerMapping;
+ var tuplizer = tuplizerMapping.GetTuplizerOrNull(EntityMode.Poco);
+ if(tuplizer !=null)
+ {
+ overridesGetHashCode = ReflectHelper.OverridesGetHashCode(tuplizer.MappedClass);
+ }
}
/// <summary></summary>
@@ -100,6 +106,8 @@
public override int GetHashCode(object x, EntityMode entityMode, ISessionFactoryImplementor factory)
{
+ if (overridesGetHashCode)
+ return x.GetHashCode();
return GetHashCode(x, entityMode);
}
Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113
___________________________________________________________________
Added: bugtraq:url
+ http://jira.nhibernate.org/browse/%BUGID%
Added: bugtraq:logregex
+ NH-\d+
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Fixture.cs 2010-03-03 15:54:34 UTC (rev 4951)
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Transactions;
+using NHibernate.Dialect;
+using NHibernate.Impl;
+using NUnit.Framework;
+using NHibernate.Criterion;
+
+namespace NHibernate.Test.NHSpecificTest.NH2113
+{
+ [TestFixture]
+ public class Fixture : BugTestCase
+ {
+
+ [Test]
+ public void ShouldNotEagerLoadKeyManyToOneWhenOverridingGetHashCode()
+ {
+ using (var s = OpenSession())
+ using(var tx = s.BeginTransaction())
+ {
+ var grp = new Group();
+ s.Save(grp);
+
+ var broker = new Broker{Key = new Key{BankId = 1, Id = -1}};
+ s.Save(broker);
+
+ var load = new Loan {Broker = broker, Group = grp, Name = "money!!!"};
+ s.Save(load);
+
+ tx.Commit();
+ }
+
+ bool isInitialized;
+ using (var s = OpenSession())
+ using (var tx = s.BeginTransaction())
+ {
+ var loan = s.CreateCriteria<Loan>()
+ .UniqueResult<Loan>();
+
+ isInitialized = NHibernateUtil.IsInitialized(loan.Broker);
+
+ tx.Commit();
+ }
+
+
+ using (var s = OpenSession())
+ using (var tx = s.BeginTransaction())
+ {
+ s.Delete("from System.Object");
+
+ tx.Commit();
+ }
+
+ Assert.False(isInitialized);
+ }
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Mappings.hbm.xml 2010-03-03 15:54:34 UTC (rev 4951)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.NHSpecificTest.NH2113">
+
+ <class name="Loan">
+ <composite-id>
+ <key-many-to-one name="Broker" class="Broker">
+ <column name="BrokerID"/>
+ <column name="BankID"/>
+ </key-many-to-one>
+ <key-many-to-one name="Group"
+ column="GroupID" class="Group"/>
+ </composite-id>
+ <property name="Name" />
+ </class>
+
+ <class name="Group" table="Groups">
+ <id name="Id" column="GroupID">
+ <generator class="increment"/>
+ </id>
+ </class>
+
+ <class name="Broker">
+ <composite-id name="Key">
+ <key-property name="Id"
+ column="BrokerID"/>
+ <key-property name="BankId"/>
+ </composite-id>
+ </class>
+
+</hibernate-mapping>
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Model.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2113/Model.cs 2010-03-03 15:54:34 UTC (rev 4951)
@@ -0,0 +1,89 @@
+namespace NHibernate.Test.NHSpecificTest.NH2113
+{
+ public class Loan
+ {
+ public virtual Broker Broker{ get; set;}
+ public virtual Group Group { get; set; }
+ public virtual string Name { get; set; }
+
+ public virtual bool Equals(Loan other)
+ {
+ if (ReferenceEquals(null, other)) return false;
+ if (ReferenceEquals(this, other)) return true;
+ return Equals(other.Broker, Broker) && Equals(other.Group, Group);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (obj.GetType() != typeof (Loan)) return false;
+ return Equals((Loan) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ unchecked
+ {
+ return ((Broker != null ? Broker.Key.GetHashCode() : 0)*397) ^ (Group != null ? Group.GetHashCode() : 0);
+ }
+ }
+ }
+
+ public class Group
+ {
+ public virtual int Id { get; set; }
+ }
+ public class Broker
+ {
+ public virtual Key Key { get; set; }
+
+ public virtual bool Equals(Broker other)
+ {
+ if (ReferenceEquals(null, other)) return false;
+ if (ReferenceEquals(this, other)) return true;
+ return Equals(other.Key, Key);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (obj.GetType() != typeof (Broker)) return false;
+ return Equals((Broker) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ return (Key != null ? Key.GetHashCode() : 0);
+ }
+ }
+ public class Key
+ {
+ public int Id { get; set; }
+ public int BankId { get; set; }
+
+ public virtual bool Equals(Key other)
+ {
+ if (ReferenceEquals(null, other)) return false;
+ if (ReferenceEquals(this, other)) return true;
+ return other.Id == Id && other.BankId == BankId;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (obj.GetType() != typeof (Key)) return false;
+ return Equals((Key) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ unchecked
+ {
+ return (Id*397) ^ BankId;
+ }
+ }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-03-02 20:55:46 UTC (rev 4950)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-03-03 15:54:34 UTC (rev 4951)
@@ -707,6 +707,8 @@
<Compile Include="NHSpecificTest\NH2074\Model.cs" />
<Compile Include="NHSpecificTest\NH2077\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2077\Model.cs" />
+ <Compile Include="NHSpecificTest\NH2113\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2113\Model.cs" />
<Compile Include="NHSpecificTest\NH473\Child.cs" />
<Compile Include="NHSpecificTest\NH473\Fixture.cs" />
<Compile Include="NHSpecificTest\NH473\Parent.cs" />
@@ -2124,6 +2126,7 @@
<EmbeddedResource Include="CfgTest\Loquacious\EntityToCache.hbm.xml" />
<EmbeddedResource Include="DriverTest\SqlServerCeEntity.hbm.xml" />
<Content Include="DynamicEntity\package.html" />
+ <EmbeddedResource Include="NHSpecificTest\NH2113\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1981\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2074\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2077\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|