From: <fab...@us...> - 2010-08-07 16:51:56
|
Revision: 5124 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5124&view=rev Author: fabiomaulo Date: 2010-08-07 16:51:50 +0000 (Sat, 07 Aug 2010) Log Message: ----------- Fix NH-2266 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Persister/Entity/SingleTableEntityPersister.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Domain.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Persister/Entity/SingleTableEntityPersister.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Persister/Entity/SingleTableEntityPersister.cs 2010-08-07 12:58:27 UTC (rev 5123) +++ trunk/nhibernate/src/NHibernate/Persister/Entity/SingleTableEntityPersister.cs 2010-08-07 16:51:50 UTC (rev 5124) @@ -527,6 +527,12 @@ private string DiscriminatorFilterFragment(string alias) { + const string abstractClassWithNoSubclassExceptionMessageTemplate = +@"The class {0} can't be instatiated and does not have mapped subclasses; +possible solutions: +- don't map the abstract class +- map the its subclasses."; + if (NeedsDiscriminator) { InFragment frag = new InFragment(); @@ -541,13 +547,20 @@ } string[] subclasses = SubclassClosure; - for (int i = 0; i < subclasses.Length; i++) + int validValuesForInFragment = 0; + foreach (string t in subclasses) { - IQueryable queryable = (IQueryable)Factory.GetEntityPersister(subclasses[i]); + var queryable = (IQueryable) Factory.GetEntityPersister(t); if (!queryable.IsAbstract) + { frag.AddValue(queryable.DiscriminatorSQLValue); + validValuesForInFragment++; + } } - + if(validValuesForInFragment == 0) + { + throw new NotSupportedException(string.Format(abstractClassWithNoSubclassExceptionMessageTemplate, subclasses[0])); + } StringBuilder buf = new StringBuilder(50).Append(" and ").Append(frag.ToFragmentString().ToString()); return buf.ToString(); Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Domain.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Domain.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Domain.cs 2010-08-07 16:51:50 UTC (rev 5124) @@ -0,0 +1,10 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.NH2266 +{ + public abstract class Token { public virtual int Id { get; set; } } + + public class SecurityToken : Token { public virtual string Owner { get; set; } } + + public abstract class TemporaryToken : Token { public virtual DateTime ExpiryDate { get; set; } } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Fixture.cs 2010-08-07 16:51:50 UTC (rev 5124) @@ -0,0 +1,19 @@ +using System; +using NHibernate.Cfg; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2266 +{ + public class Fixture + { + [Test] + public void WhenBuildSessionFactoryThenThrows() + { + Configuration cfg = TestConfigurationHelper.GetDefaultConfiguration(); + cfg.AddResource("NHibernate.Test.NHSpecificTest.NH2266.Mappings.hbm.xml", GetType().Assembly); + cfg.Executing(c => c.BuildSessionFactory()).Throws<NotSupportedException>() + .And.ValueOf.Message.Should().Contain("does not have mapped subclasses").And.Contain(typeof(TemporaryToken).FullName); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2266/Mappings.hbm.xml 2010-08-07 16:51:50 UTC (rev 5124) @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2266"> + + <class name="Token" abstract="true"> + <id name="Id"> + <generator class="native" /> + </id> + <discriminator/> + <subclass name="SecurityToken"> + <property name="Owner"/> + </subclass> + <subclass name="TemporaryToken" abstract="true"> + <property name="ExpiryDate"/> + </subclass> + </class> +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-08-07 12:58:27 UTC (rev 5123) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-08-07 16:51:50 UTC (rev 5124) @@ -454,6 +454,8 @@ <Compile Include="NHSpecificTest\NH2148\Domain.cs" /> <Compile Include="NHSpecificTest\NH2245\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2245\Model.cs" /> + <Compile Include="NHSpecificTest\NH2266\Domain.cs" /> + <Compile Include="NHSpecificTest\NH2266\Fixture.cs" /> <Compile Include="TypesTest\CharClass.cs" /> <Compile Include="TypesTest\CharClassFixture.cs" /> <Compile Include="TypesTest\DateTimeClass.cs" /> @@ -2240,6 +2242,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2266\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\CharClass.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1836\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\DateTimeClass.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |