List of usage examples for org.hibernate.mapping PersistentClass setSuperMappedSuperclass
public void setSuperMappedSuperclass(MappedSuperclass superMappedSuperclass)
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()); }