Example usage for org.hibernate.mapping UnionSubclass UnionSubclass

List of usage examples for org.hibernate.mapping UnionSubclass UnionSubclass

Introduction

In this page you can find the example usage for org.hibernate.mapping UnionSubclass UnionSubclass.

Prototype

public UnionSubclass(PersistentClass superclass, MetadataBuildingContext metadataBuildingContext) 

Source Link

Usage

From source file:org.grails.orm.hibernate.cfg.GrailsDomainBinder.java

License:Apache License

/**
 * Binds a sub class./*from ww  w .  ja  v a  2s  .  c  o  m*/
 *
 * @param sub      The sub domain class instance
 * @param parent   The parent persistent class instance
 * @param mappings The mappings instance
 * @param sessionFactoryBeanName  the session factory bean name
 */
protected void bindSubClass(HibernatePersistentEntity sub, PersistentClass parent,
        InFlightMetadataCollector mappings, String sessionFactoryBeanName) {
    evaluateMapping(sub, defaultMapping);
    Mapping m = getMapping(parent.getMappedClass());
    Subclass subClass;
    boolean tablePerSubclass = m != null && !m.getTablePerHierarchy() && !m.isTablePerConcreteClass();
    boolean tablePerConcreteClass = m != null && m.isTablePerConcreteClass();
    final String fullName = sub.getName();
    if (tablePerSubclass) {
        subClass = new JoinedSubclass(parent, this.metadataBuildingContext);
    } else if (tablePerConcreteClass) {
        subClass = new UnionSubclass(parent, this.metadataBuildingContext);
    } else {
        subClass = new SingleTableSubclass(parent, this.metadataBuildingContext);
        // set the descriminator value as the name of the class. This is the
        // value used by Hibernate to decide what the type of the class is
        // to perform polymorphic queries
        Mapping subMapping = getMapping(sub);
        DiscriminatorConfig discriminatorConfig = subMapping != null ? subMapping.getDiscriminator() : null;

        subClass.setDiscriminatorValue(discriminatorConfig != null && discriminatorConfig.getValue() != null
                ? discriminatorConfig.getValue()
                : fullName);

        if (subMapping != null) {
            configureDerivedProperties(sub, subMapping);
        }
    }

    subClass.setEntityName(fullName);
    subClass.setJpaEntityName(unqualify(fullName));

    parent.addSubclass(subClass);
    mappings.addEntityBinding(subClass);

    if (tablePerSubclass) {
        bindJoinedSubClass(sub, (JoinedSubclass) subClass, mappings, m, sessionFactoryBeanName);
    } else if (tablePerConcreteClass) {
        bindUnionSubclass(sub, (UnionSubclass) subClass, mappings, sessionFactoryBeanName);
    } else {
        bindSubClass(sub, subClass, mappings, sessionFactoryBeanName);
    }

    final java.util.Collection<PersistentEntity> childEntities = sub.getMappingContext()
            .getDirectChildEntities(sub);
    if (!childEntities.isEmpty()) {
        // bind the sub classes
        bindSubClasses(sub, subClass, mappings, sessionFactoryBeanName);
    }
}