Exemple #1
0
        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);
        }
Exemple #2
0
        private void AddUnionSubclasses(HbmUnionSubclass unionSubclass,
                                        IDictionary <string, MetaAttribute> inheritedMetas)
        {
            var binder = new UnionSubclassBinder(Mappings, dialect);

            binder.Bind(unionSubclass, inheritedMetas);
        }
Exemple #3
0
        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");
        }
Exemple #4
0
        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);
 }
Exemple #6
0
        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");
        }
Exemple #7
0
        public void Bind(HbmUnionSubclass unionSubclassMapping, IDictionary <string, MetaAttribute> inheritedMetas)
        {
            PersistentClass superModel = GetSuperclass(unionSubclassMapping.extends);

            HandleUnionSubclass(superModel, unionSubclassMapping, inheritedMetas);
        }