public void HandleUnionSubclass(PersistentClass model, HbmUnionSubclass unionSubclassMapping, IDictionary <string, MetaAttribute> inheritedMetas) { var unionSubclass = new UnionSubclass(model); BindClass(unionSubclassMapping, unionSubclass, inheritedMetas); inheritedMetas = GetMetas(unionSubclassMapping, inheritedMetas, true); // get meta's from <union-subclass> // union subclass if (unionSubclass.EntityPersisterClass == null) { unionSubclass.RootClazz.EntityPersisterClass = typeof(UnionSubclassEntityPersister); } //table + schema names string schema = unionSubclassMapping.schema ?? mappings.SchemaName; string catalog = unionSubclassMapping.catalog ?? mappings.CatalogName; Table denormalizedSuperTable = unionSubclass.Superclass.Table; Table mytable = mappings.AddDenormalizedTable(schema, catalog, GetClassTableName(unionSubclass, unionSubclassMapping.table), unionSubclass.IsAbstract.GetValueOrDefault(), unionSubclassMapping.Subselect, denormalizedSuperTable); ((ITableOwner)unionSubclass).Table = mytable; log.Info("Mapping union-subclass: {0} -> {1}", unionSubclass.EntityName, unionSubclass.Table.Name); // properties new PropertiesBinder(mappings, unionSubclass, dialect).Bind(unionSubclassMapping.Properties, inheritedMetas); BindUnionSubclasses(unionSubclassMapping.UnionSubclasses, unionSubclass, inheritedMetas); model.AddSubclass(unionSubclass); mappings.AddClass(unionSubclass); }
private void AddUnionSubclasses(HbmUnionSubclass unionSubclass, IDictionary <string, MetaAttribute> inheritedMetas) { var binder = new UnionSubclassBinder(Mappings, dialect); binder.Bind(unionSubclass, inheritedMetas); }
private static string GetFileName(HbmMapping hbmMapping) { string name = "MyMapping"; HbmClass rc = hbmMapping.RootClasses.FirstOrDefault(); if (rc != null) { name = rc.Name; } HbmSubclass sc = hbmMapping.SubClasses.FirstOrDefault(); if (sc != null) { name = sc.Name; } HbmJoinedSubclass jc = hbmMapping.JoinedSubclasses.FirstOrDefault(); if (jc != null) { name = jc.Name; } HbmUnionSubclass uc = hbmMapping.UnionSubclasses.FirstOrDefault(); if (uc != null) { name = uc.Name; } return(name + ".hbm.xml"); }
public UnionSubclassMapper(System.Type subClass, HbmMapping mapDoc) : base(subClass, mapDoc) { classMapping = new HbmUnionSubclass(); var toAdd = new[] { classMapping }; classMapping.name = subClass.GetShortClassName(mapDoc); classMapping.extends = subClass.BaseType.GetShortClassName(mapDoc); mapDoc.Items = mapDoc.Items == null ? toAdd : mapDoc.Items.Concat(toAdd).ToArray(); }
public UnionSubclassMapper(System.Type subClass, HbmMapping mapDoc) : base(subClass, mapDoc) { classMapping = new HbmUnionSubclass(); classMapping.name = subClass.GetShortClassName(mapDoc); classMapping.extends = subClass.BaseType.GetShortClassName(mapDoc); if (subClass.IsAbstract) { classMapping.@abstract = true; classMapping.abstractSpecified = true; } mapDoc.Items = ArrayHelper.Append(mapDoc.Items, classMapping); }
private void VerifyHinheritedMapping(HbmMapping mapping) { mapping.UnionSubclasses.Should().Have.Count.EqualTo(2); HbmUnionSubclass sc1 = mapping.UnionSubclasses.First(us => us.Name.Contains("EntitySimple")); sc1.extends.Should().Not.Be.Null().And.Contain("AbstractEntity"); sc1.Properties.Should().Have.Count.EqualTo(1); sc1.Properties.Single().Name.Should().Be.EqualTo("Name"); HbmUnionSubclass sc2 = mapping.UnionSubclasses.First(us => us.Name.Contains("Hinherited")); sc2.extends.Should().Not.Be.Null().And.Contain("EntitySimple"); sc2.Properties.Should().Have.Count.EqualTo(1); sc2.Properties.Single().Name.Should().Be.EqualTo("Surname"); }
public void Bind(HbmUnionSubclass unionSubclassMapping, IDictionary <string, MetaAttribute> inheritedMetas) { PersistentClass superModel = GetSuperclass(unionSubclassMapping.extends); HandleUnionSubclass(superModel, unionSubclassMapping, inheritedMetas); }