Example usage for org.hibernate.mapping PersistentClass setSuperMappedSuperclass

List of usage examples for org.hibernate.mapping PersistentClass setSuperMappedSuperclass

Introduction

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

Prototype

public void setSuperMappedSuperclass(MappedSuperclass superMappedSuperclass) 

Source Link

Usage

From source file:org.beangle.orm.hibernate.internal.PersistentClassMerger.java

License:Open Source License

public static void merge(PersistentClass sub, PersistentClass parent) {
    if (!mergeSupport)
        throw new RuntimeException("Merge not supported!");

    String className = sub.getClassName();
    // 1. convert old to mapped superclass
    MappedSuperclass msc = new MappedSuperclass(parent.getSuperMappedSuperclass(), null);
    final Class<?> parentClass = parent.getMappedClass();
    msc.setMappedClass(parentClass);/*w  w w .  j  a v  a  2s . co  m*/

    // 2.clear old subclass property
    parent.setSuperMappedSuperclass(msc);
    parent.setClassName(className);
    parent.setProxyInterfaceName(className);
    if (parent instanceof RootClass) {
        if (!parentClass.getSuperclass().isAnnotationPresent(Entity.class)) {
            ((RootClass) parent).setDiscriminator(null);
            ((RootClass) parent).setPolymorphic(false);
            @SuppressWarnings("unchecked")
            Iterator<Column> iter = parent.getTable().getColumnIterator();
            while (iter.hasNext()) {
                if (iter.next().getName().equalsIgnoreCase("dtype")) {
                    iter.remove();
                    break;
                }
            }
        }
    }

    try {
        @SuppressWarnings("unchecked")
        List<Property> declareProperties = (List<Property>) declarePropertyField.get(parent);
        for (Property p : declareProperties)
            msc.addDeclaredProperty(p);
        ((List<?>) subPropertyField.get(parent)).clear();
        ((List<?>) subclassField.get(parent)).clear();
    } catch (Exception e) {
    }

    // 3. add property to old
    try {
        Iterator<?> pIter = sub.getPropertyIterator();
        while (pIter.hasNext()) {
            Property p = (Property) pIter.next();
            parent.addProperty(p);
        }
    } catch (Exception e) {
    }
    logger.info("{} replace {}.", sub.getClassName(), parent.getClassName());
}