public void bindEntityHierarchy(EntityHierarchySourceImpl hierarchySource) { final RootClass rootEntityDescriptor = new RootClass( metadataBuildingContext ); bindRootEntity( hierarchySource, rootEntityDescriptor ); final InFlightMetadataCollector metadataCollector = hierarchySource.getRoot() .getLocalMetadataBuildingContext() .getMetadataCollector(); metadataCollector.addEntityBinding( rootEntityDescriptor ); metadataCollector.addEntityMappingHierarchy( rootEntityDescriptor.getEntityMappingHierarchy() ); switch ( hierarchySource.getHierarchyInheritanceType() ) { case NO_INHERITANCE: { // nothing to do break; } case DISCRIMINATED: { bindDiscriminatorSubclassEntities( hierarchySource.getRoot(), rootEntityDescriptor ); break; } case JOINED: { bindJoinedSubclassEntities( hierarchySource.getRoot(), rootEntityDescriptor ); break; } case UNION: { bindUnionSubclassEntities( hierarchySource.getRoot(), rootEntityDescriptor ); break; } } }
final RootClass rootClass = (RootClass) persistentClass; metadataCollector.addSecondPass( new CreateKeySecondPass( rootClass ) ); metadataCollector.addEntityMappingHierarchy( rootClass.getEntityMappingHierarchy() );