From: <fab...@us...> - 2008-09-18 11:44:28
|
Revision: 3764 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3764&view=rev Author: fabiomaulo Date: 2008-09-18 18:44:37 +0000 (Thu, 18 Sep 2008) Log Message: ----------- - Test for Extends (2 ignored tests related with entity-name feature) - Refactoring for generic, equality comparer and some other stuff Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/ClassExtractor.cs trunk/nhibernate/src/NHibernate/Cfg/MappingsQueue.cs trunk/nhibernate/src/NHibernate/Cfg/MappingsQueueEntry.cs trunk/nhibernate/src/NHibernate/Util/AssemblyQualifiedTypeName.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-2.0.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/Extendshbm/ trunk/nhibernate/src/NHibernate.Test/Extendshbm/Customer.cs trunk/nhibernate/src/NHibernate.Test/Extendshbm/Customer.hbm.xml trunk/nhibernate/src/NHibernate.Test/Extendshbm/Employee.cs trunk/nhibernate/src/NHibernate.Test/Extendshbm/Employee.hbm.xml trunk/nhibernate/src/NHibernate.Test/Extendshbm/ExtendsFixture.cs trunk/nhibernate/src/NHibernate.Test/Extendshbm/Person.cs trunk/nhibernate/src/NHibernate.Test/Extendshbm/Person.hbm.xml trunk/nhibernate/src/NHibernate.Test/Extendshbm/allinone.hbm.xml trunk/nhibernate/src/NHibernate.Test/Extendshbm/allseparateinone.hbm.xml trunk/nhibernate/src/NHibernate.Test/Extendshbm/entitynames.hbm.xml trunk/nhibernate/src/NHibernate.Test/Extendshbm/packageentitynames.hbm.xml trunk/nhibernate/src/NHibernate.Test/Extendshbm/unionsubclass.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Cfg/ClassExtractor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/ClassExtractor.cs 2008-09-18 18:41:18 UTC (rev 3763) +++ trunk/nhibernate/src/NHibernate/Cfg/ClassExtractor.cs 2008-09-18 18:44:37 UTC (rev 3764) @@ -1,7 +1,7 @@ -using System.Collections; using System.Xml; -using Iesi.Collections; using NHibernate.Util; +using System.Collections.Generic; +using Iesi.Collections.Generic; namespace NHibernate.Cfg { @@ -16,24 +16,69 @@ /// </summary> public class ClassEntry { - private readonly AssemblyQualifiedTypeName _fullExtends; - private readonly AssemblyQualifiedTypeName _fullClassName; + private readonly string entityName; + private readonly string extendsEntityName; + private readonly AssemblyQualifiedTypeName fullExtends; + private readonly AssemblyQualifiedTypeName fullClassName; + private readonly int hashCode; - public ClassEntry(string extends, string className, string assembly, string @namespace) + public ClassEntry(string extends, string className, string entityName, string assembly, string @namespace) { - _fullExtends = extends == null ? null : TypeNameParser.Parse(extends, @namespace, assembly); - _fullClassName = className == null ? null : TypeNameParser.Parse(className, @namespace, assembly); + fullExtends = string.IsNullOrEmpty(extends) ? null : TypeNameParser.Parse(extends, @namespace, assembly); + fullClassName = string.IsNullOrEmpty(className) ? null : TypeNameParser.Parse(className, @namespace, assembly); + this.entityName = entityName; + extendsEntityName = string.IsNullOrEmpty(extends) ? null : extends; + unchecked + { + hashCode = (entityName != null ? entityName.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (fullExtends != null ? fullExtends.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (fullClassName != null ? fullClassName.GetHashCode() : 0); + } } public AssemblyQualifiedTypeName FullExtends { - get { return _fullExtends; } + get { return fullExtends; } } public AssemblyQualifiedTypeName FullClassName { - get { return _fullClassName; } + get { return fullClassName; } } + + public string EntityName + { + get { return entityName; } + } + + public string ExtendsEntityName + { + get { return extendsEntityName; } + } + + public override bool Equals(object obj) + { + ClassEntry that = obj as ClassEntry; + return Equals(that); + } + + public bool Equals(ClassEntry obj) + { + if (obj == null) + { + return false; + } + if (ReferenceEquals(this, obj)) + { + return true; + } + return Equals(obj.entityName, entityName) && Equals(obj.fullExtends, fullExtends) && Equals(obj.fullClassName, fullClassName); + } + + public override int GetHashCode() + { + return hashCode; + } } /// <summary> @@ -42,7 +87,7 @@ /// </summary> /// <param name="document">A validated <see cref="XmlDocument"/> representing /// a mapping file.</param> - public static ICollection GetClassEntries(XmlDocument document) + public static ICollection<ClassEntry> GetClassEntries(XmlDocument document) { // TODO this should be extracted into a utility method since there's similar // code in Configuration @@ -50,7 +95,7 @@ nsmgr.AddNamespace(HbmConstants.nsPrefix, Configuration.MappingSchemaXMLNS); // Since the document is validated, no error checking is done in this method. - HashedSet classEntries = new HashedSet(); + HashedSet<ClassEntry> classEntries = new HashedSet<ClassEntry>(); XmlNode root = document.DocumentElement; @@ -65,12 +110,15 @@ nsmgr ); - foreach (XmlNode classNode in classNodes) + if (classNodes != null) { - string name = XmlHelper.GetAttributeValue(classNode, "name"); - string extends = XmlHelper.GetAttributeValue(classNode, "extends"); - ClassEntry ce = new ClassEntry(extends, name, assembly, @namespace); - classEntries.Add(ce); + foreach (XmlNode classNode in classNodes) + { + string name = XmlHelper.GetAttributeValue(classNode, "name"); + string extends = XmlHelper.GetAttributeValue(classNode, "extends"); + string entityName = XmlHelper.GetAttributeValue(classNode, "entity-name"); + classEntries.Add(new ClassEntry(extends, name, entityName, assembly, @namespace)); + } } return classEntries; Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingsQueue.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingsQueue.cs 2008-09-18 18:41:18 UTC (rev 3763) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingsQueue.cs 2008-09-18 18:44:37 UTC (rev 3764) @@ -1,11 +1,8 @@ -using System; using System.Collections; -using System.Reflection; using System.Text; +using Iesi.Collections.Generic; +using System.Collections.Generic; -using Iesi.Collections; -using NHibernate.Util; - namespace NHibernate.Cfg { /// <summary> @@ -13,9 +10,9 @@ /// </summary> public class MappingsQueue { - private readonly ISet _processedClassNames = new HashedSet(); - - private readonly IList _unavailableEntries = new ArrayList(); + private readonly ISet<string> _processedClassNames = new HashedSet<string>(); + + private readonly List<MappingsQueueEntry> _unavailableEntries = new List<MappingsQueueEntry>(); private readonly Queue _availableEntries = new Queue(); /// <summary> @@ -23,9 +20,7 @@ /// </summary> public void AddDocument(NamedXmlDocument document) { - MappingsQueueEntry re = new MappingsQueueEntry( - document, - ClassExtractor.GetClassEntries(document.Document)); + MappingsQueueEntry re = new MappingsQueueEntry(document, ClassExtractor.GetClassEntries(document.Document)); AddEntry(re); } @@ -57,7 +52,7 @@ } } - private void AddProcessedClassNames(ICollection classNames) + private void AddProcessedClassNames(ICollection<string> classNames) { _processedClassNames.AddAll(classNames); if (classNames.Count > 0) @@ -113,7 +108,7 @@ foreach (MappingsQueueEntry resourceEntry in resourceEntries) { - foreach (AssemblyQualifiedTypeName className in resourceEntry.RequiredClassNames) + foreach (string className in resourceEntry.RequiredClassNames) { message.Append('\n') .Append(className); Modified: trunk/nhibernate/src/NHibernate/Cfg/MappingsQueueEntry.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/MappingsQueueEntry.cs 2008-09-18 18:41:18 UTC (rev 3763) +++ trunk/nhibernate/src/NHibernate/Cfg/MappingsQueueEntry.cs 2008-09-18 18:44:37 UTC (rev 3764) @@ -1,6 +1,7 @@ -using System.Collections; using Iesi.Collections; using NHibernate.Util; +using Iesi.Collections.Generic; +using System.Collections.Generic; namespace NHibernate.Cfg { @@ -10,10 +11,10 @@ public class MappingsQueueEntry { private readonly NamedXmlDocument document; - private readonly ISet requiredClassNames; - private readonly ISet containedClassNames; + private readonly ISet<string> requiredClassNames; + private readonly ISet<string> containedClassNames; - public MappingsQueueEntry(NamedXmlDocument document, ICollection classEntries) + public MappingsQueueEntry(NamedXmlDocument document, IEnumerable<ClassExtractor.ClassEntry> classEntries) { this.document = document; @@ -27,28 +28,34 @@ get { return document; } } - private static ISet GetClassNames(ICollection classEntries) + private static ISet<string> GetClassNames(IEnumerable<ClassExtractor.ClassEntry> classEntries) { - HashedSet result = new HashedSet(); + HashedSet<string> result = new HashedSet<string>(); foreach (ClassExtractor.ClassEntry ce in classEntries) { - if (ce.FullClassName != null) - result.Add(ce.FullClassName); + if (ce.EntityName != null) + { + result.Add(ce.EntityName); + } + else if (ce.FullClassName != null) + { + result.Add(ce.FullClassName.Type); + } } return result; } - private static ISet GetExtendsNames(ICollection classEntries) + private static ISet<string> GetExtendsNames(IEnumerable<ClassExtractor.ClassEntry> classEntries) { - HashedSet result = new HashedSet(); + HashedSet<string> result = new HashedSet<string>(); foreach (ClassExtractor.ClassEntry ce in classEntries) { if (ce.FullExtends != null) { - result.Add(ce.FullExtends); + result.Add(ce.FullExtends.Type); } } @@ -60,12 +67,12 @@ /// needed by the classes in this resource. /// </summary> /// <returns>An <see cref="ISet"/> of <see cref="AssemblyQualifiedTypeName" /></returns> - public ICollection RequiredClassNames + public ICollection<string> RequiredClassNames { get { return requiredClassNames; } } - public ICollection ContainedClassNames + public ICollection<string> ContainedClassNames { get { return containedClassNames; } } Modified: trunk/nhibernate/src/NHibernate/Util/AssemblyQualifiedTypeName.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Util/AssemblyQualifiedTypeName.cs 2008-09-18 18:41:18 UTC (rev 3763) +++ trunk/nhibernate/src/NHibernate/Util/AssemblyQualifiedTypeName.cs 2008-09-18 18:44:37 UTC (rev 3764) @@ -4,8 +4,9 @@ { public class AssemblyQualifiedTypeName { - private string type; - private string assembly; + private readonly string type; + private readonly string assembly; + private readonly int hashCode; public AssemblyQualifiedTypeName(string type, string assembly) { @@ -15,6 +16,10 @@ } this.type = type; this.assembly = assembly; + unchecked + { + hashCode = (type.GetHashCode() * 397) ^ (assembly != null ? assembly.GetHashCode() : 0); + } } public string Type @@ -30,40 +35,35 @@ public override bool Equals(object obj) { AssemblyQualifiedTypeName other = obj as AssemblyQualifiedTypeName; - - if (other == null) return false; - - return string.Equals(type, other.type) - && string.Equals(assembly, other.assembly); + return Equals(other); } - public override int GetHashCode() + public override string ToString() { - unchecked + if (assembly == null) { - int hashCode = 0; - if (type != null) - { - hashCode += type.GetHashCode(); - } + return type; + } - if (assembly != null) - { - hashCode += assembly.GetHashCode(); - } - - return hashCode; - } + return string.Concat(type, ", ", assembly); } - public override string ToString() + public bool Equals(AssemblyQualifiedTypeName obj) { - if (assembly == null) + if (obj == null) { - return type; + return false; } + if (ReferenceEquals(this, obj)) + { + return true; + } + return Equals(obj.type, type) && Equals(obj.assembly, assembly); + } - return string.Concat(type, ", ", assembly); + public override int GetHashCode() + { + return hashCode; } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/Customer.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/Customer.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/Customer.cs 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,20 @@ +namespace NHibernate.Test.Extendshbm +{ + public class Customer: Person + { + private Employee salesperson; + private string comments; + + public virtual Employee Salesperson + { + get { return salesperson; } + set { salesperson = value; } + } + + public virtual string Comments + { + get { return comments; } + set { comments = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/Customer.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/Customer.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/Customer.hbm.xml 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.Extendshbm" + default-access="field.camelcase"> + <subclass name="Customer" extends="Person"> + <property name="Comments"/> + <many-to-one name="Salesperson"/> + </subclass> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/Employee.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/Employee.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/Employee.cs 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,27 @@ +namespace NHibernate.Test.Extendshbm +{ + public class Employee: Person + { + private string title; + private decimal salary; + private Employee manager; + + public virtual string Title + { + get { return title; } + set { title = value; } + } + + public virtual decimal Salary + { + get { return salary; } + set { salary = value; } + } + + public virtual Employee Manager + { + get { return manager; } + set { manager = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/Employee.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/Employee.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/Employee.hbm.xml 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.Extendshbm" + default-access="field.camelcase"> + + <subclass name="Employee" extends="Person"> + <property name="Title" length="20"/> + <property name="Salary" length="2"/> + <many-to-one name="Manager"/> + </subclass> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/ExtendsFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/ExtendsFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/ExtendsFixture.cs 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,132 @@ +using NHibernate.Cfg; +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; + +namespace NHibernate.Test.Extendshbm +{ + [TestFixture] + public class ExtendsFixture + { + protected static string BaseForMappings + { + get { return "NHibernate.Test."; } + } + + [Test] + public void AllInOne() + { + Configuration cfg = new Configuration(); + + cfg.AddResource(BaseForMappings + "Extendshbm.allinone.hbm.xml", typeof(ExtendsFixture).Assembly); + Assert.That(cfg.GetClassMapping(typeof (Customer).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof(Person).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof(Employee).FullName), Is.Not.Null); + } + + [Test] + public void OutOfOrder() + { + Configuration cfg = new Configuration(); + + cfg.AddResource(BaseForMappings + "Extendshbm.Customer.hbm.xml", typeof (ExtendsFixture).Assembly); + + Assert.That(cfg.GetClassMapping(typeof (Customer).FullName), Is.Null, "cannot be in the configuration yet!"); + + cfg.AddResource(BaseForMappings + "Extendshbm.Person.hbm.xml", typeof (ExtendsFixture).Assembly); + cfg.AddResource(BaseForMappings + "Extendshbm.Employee.hbm.xml", typeof (ExtendsFixture).Assembly); + + cfg.BuildSessionFactory(); + + Assert.That(cfg.GetClassMapping(typeof (Customer).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof (Person).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof (Employee).FullName), Is.Not.Null); + } + + [Test] + public void NwaitingForSuper() + { + Configuration cfg = new Configuration(); + + cfg.AddResource(BaseForMappings + "Extendshbm.Customer.hbm.xml", typeof (ExtendsFixture).Assembly); + Assert.That(cfg.GetClassMapping(typeof (Customer).FullName), Is.Null, "cannot be in the configuration yet!"); + + cfg.AddResource(BaseForMappings + "Extendshbm.Employee.hbm.xml", typeof (ExtendsFixture).Assembly); + Assert.That(cfg.GetClassMapping(typeof (Employee).FullName), Is.Null, "cannot be in the configuration yet!"); + + cfg.AddResource(BaseForMappings + "Extendshbm.Person.hbm.xml", typeof (ExtendsFixture).Assembly); + + cfg.BuildMappings(); + Assert.That(cfg.GetClassMapping(typeof (Customer).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof (Person).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof (Employee).FullName), Is.Not.Null); + } + + [Test] + public void MissingSuper() + { + Configuration cfg = new Configuration(); + + try + { + cfg.AddResource(BaseForMappings + "Extendshbm.Customer.hbm.xml", typeof (ExtendsFixture).Assembly); + Assert.That(cfg.GetClassMapping(typeof (Customer).FullName), Is.Null, "cannot be in the configuration yet!"); + cfg.AddResource(BaseForMappings + "Extendshbm.Employee.hbm.xml", typeof (ExtendsFixture).Assembly); + + cfg.BuildSessionFactory(); + + Assert.Fail("Should not be able to build sessionfactory without a Person"); + } + catch (HibernateException) {} + } + + [Test] + public void AllSeparateInOne() + { + Configuration cfg = new Configuration(); + + cfg.AddResource(BaseForMappings + "Extendshbm.allseparateinone.hbm.xml", typeof (ExtendsFixture).Assembly); + + cfg.BuildSessionFactory(); + Assert.That(cfg.GetClassMapping(typeof (Customer).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof (Person).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof (Employee).FullName), Is.Not.Null); + } + + [Test, Ignore("Not supported yet!")] + public void JoinedSubclassAndEntityNamesOnly() + { + Configuration cfg = new Configuration(); + + cfg.AddResource(BaseForMappings + "Extendshbm.entitynames.hbm.xml", typeof (ExtendsFixture).Assembly); + + cfg.BuildMappings(); + Assert.That(cfg.GetClassMapping("EntityHasName"), Is.Not.Null); + Assert.That(cfg.GetClassMapping("EntityCompany"), Is.Not.Null); + } + + [Test, Ignore("Not supported yet!")] + public void EntityNamesWithPackageFailureExpected() + { + Configuration cfg = new Configuration(); + cfg.AddResource(BaseForMappings + "Extendshbm.packageentitynames.hbm.xml", typeof (ExtendsFixture).Assembly); + + cfg.BuildMappings(); + + Assert.That(cfg.GetClassMapping("EntityHasName"), Is.Not.Null); + Assert.That(cfg.GetClassMapping("EntityCompany"), Is.Not.Null); + } + + [Test] + public void UnionSubclass() + { + Configuration cfg = new Configuration(); + + cfg.AddResource(BaseForMappings + "Extendshbm.unionsubclass.hbm.xml", typeof (ExtendsFixture).Assembly); + + cfg.BuildMappings(); + + Assert.That(cfg.GetClassMapping(typeof (Person).FullName), Is.Not.Null); + Assert.That(cfg.GetClassMapping(typeof (Customer).FullName), Is.Not.Null); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/Person.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/Person.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/Person.cs 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,27 @@ +namespace NHibernate.Test.Extendshbm +{ + public class Person + { + private long id; + private string name; + private char sex; + + public virtual long Id + { + get { return id; } + set { id = value; } + } + + public virtual string Name + { + get { return name; } + set { name = value; } + } + + public virtual char Sex + { + get { return sex; } + set { sex = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/Person.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/Person.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/Person.hbm.xml 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.Extendshbm" + default-access="field.camelcase"> + + <class name="Person"> + <id name="Id" column="person_id" unsaved-value="0"> + <generator class="native"/> + </id> + + <discriminator type="string"/> + <property name="Name" not-null="true" length="80"/> + </class> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/allinone.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/allinone.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/allinone.hbm.xml 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.Extendshbm" + default-access="field.camelcase"> + + <class name="Person"> + <id name="Id" column="person_id" unsaved-value="0"> + <generator class="native"/> + </id> + + <discriminator type="string"/> + <property name="Name" not-null="true" length="80"/> + + <subclass name="Employee"> + <property name="Title" length="20"/> + <property name="Salary" length="2"/> + <many-to-one name="Manager"/> + </subclass> + + <subclass name="Customer"> + <property name="Comments"/> + <many-to-one name="Salesperson"/> + </subclass> + </class> + +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/allseparateinone.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/allseparateinone.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/allseparateinone.hbm.xml 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.Extendshbm" + default-access="field.camelcase"> + + <class name="Person"> + + <id name="Id" column="person_id" unsaved-value="0"> + <generator class="native"/> + </id> + + <discriminator type="string"/> + + <property name="Name" not-null="true" length="80"/> + + <subclass name="Employee"> + <property name="Title" length="20"/> + <property name="Salary" length="2"/> + <many-to-one name="Manager"/> + </subclass> + + + + </class> + + + <subclass name="Customer" extends="Person"> + <property name="comments"/> + <many-to-one name="salesperson"/> + </subclass> + +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/entitynames.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/entitynames.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/entitynames.hbm.xml 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> + + <class lazy="true" entity-name="EntityHasName" table="F5_ENTITY_HASNAME"> + <id name="id" column="ID" type="long"> + <generator class="native"/> + </id> + <property name="attrName" type="string"> + <column name="NAME"/> + </property> + </class> + <joined-subclass lazy="true" entity-name="EntityCompany" table="F5_ENTITY_COMPANY" extends="EntityHasName"> + <key column="REF_ID"/> + <many-to-one name="parent" entity-name="EntityHasName"/> + </joined-subclass> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/packageentitynames.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/packageentitynames.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/packageentitynames.hbm.xml 2008-09-18 18:44:37 UTC (rev 3764) @@ -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.Extendshbm"> + + <class lazy="true" entity-name="EntityHasName" table="F5_ENTITY_HASNAME"> + <id name="id" column="ID" type="long"> + <generator class="native"/> + </id> + <property name="attrName" type="string"> + <column name="NAME"/> + </property> + </class> + <joined-subclass lazy="true" entity-name="EntityCompany" table="F5_ENTITY_COMPANY" extends="EntityHasName"> + <key column="REF_ID"/> + <many-to-one name="parent" entity-name="EntityHasName"/> + </joined-subclass> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Extendshbm/unionsubclass.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Extendshbm/unionsubclass.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Extendshbm/unionsubclass.hbm.xml 2008-09-18 18:44:37 UTC (rev 3764) @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.Extendshbm" + default-access="field.camelcase"> + + <class name="Person"> + <id name="id" column="person_id" unsaved-value="0"> + <generator class="native"/> + </id> + + <discriminator type="string"/> + + <property name="name" not-null="true" length="80"/> + </class> + + + <union-subclass name="Customer" extends="Person"> + <property name="Comments"/> + <many-to-one name="Salesperson"/> + </union-subclass> + + <subclass name="Employee" extends="Person"> + <property name="Title" length="20"/> + <property name="Salary" length="2"/> + <many-to-one name="Manager"/> + </subclass> + +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-2.0.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-2.0.csproj 2008-09-18 18:41:18 UTC (rev 3763) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test-2.0.csproj 2008-09-18 18:44:37 UTC (rev 3764) @@ -205,6 +205,10 @@ <Compile Include="ExpressionTest\SQLExpressionFixture.cs" /> <Compile Include="ExpressionTest\SubQueries\Classes.cs" /> <Compile Include="ExpressionTest\SubQueries\SubQueriesSqlFixture.cs" /> + <Compile Include="Extendshbm\Customer.cs" /> + <Compile Include="Extendshbm\Employee.cs" /> + <Compile Include="Extendshbm\ExtendsFixture.cs" /> + <Compile Include="Extendshbm\Person.cs" /> <Compile Include="Extralazy\Document.cs" /> <Compile Include="Extralazy\ExtraLazyFixture.cs" /> <Compile Include="Extralazy\Group.cs" /> @@ -1456,6 +1460,14 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="Extendshbm\allinone.hbm.xml" /> + <EmbeddedResource Include="Extendshbm\allseparateinone.hbm.xml" /> + <EmbeddedResource Include="Extendshbm\Customer.hbm.xml" /> + <EmbeddedResource Include="Extendshbm\Employee.hbm.xml" /> + <EmbeddedResource Include="Extendshbm\entitynames.hbm.xml" /> + <EmbeddedResource Include="Extendshbm\packageentitynames.hbm.xml" /> + <EmbeddedResource Include="Extendshbm\Person.hbm.xml" /> + <EmbeddedResource Include="Extendshbm\unionsubclass.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1483\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\EntityClass.hbm.xml" /> <EmbeddedResource Include="Events\Collections\Association\Bidirectional\ManyToMany\BidirectionalManyToManyBagToSetMapping.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |