/* Copyright c 2005-2012.
* Licensed under GNU LESSER General Public License, Version 3.
* http://www.gnu.org/licenses
*/
package org.beangle.model.persist.hibernate;
import org.hibernate.DuplicateMappingException;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Mappings;
import org.hibernate.cfg.SettingsFactory;
import org.hibernate.mapping.Collection;
import org.hibernate.mapping.PersistentClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Provide overriderable mapping in sessionFactory
*
* @author chaostone
*/
@SuppressWarnings("serial")
public class OverrideConfiguration extends Configuration {
private static Logger logger = LoggerFactory.getLogger(OverrideConfiguration.class);
public OverrideConfiguration() {
super();
this.metadataSourceQueue = new StmartMetadataSourceQueue();
}
public OverrideConfiguration(SettingsFactory settingsFactory) {
super(settingsFactory);
this.metadataSourceQueue = new StmartMetadataSourceQueue();
}
@Override
public Mappings createMappings() {
return new OverrideMappings();
}
protected class OverrideMappings extends MappingsImpl {
@SuppressWarnings("unchecked")
@Override
public void addClass(PersistentClass persistentClass) throws DuplicateMappingException {
String entityName = persistentClass.getEntityName();
PersistentClass old = (PersistentClass) classes.get(entityName);
if (old == null) {
classes.put(entityName, persistentClass);
} else if (old.getMappedClass().isAssignableFrom(persistentClass.getMappedClass())) {
classes.put(entityName, persistentClass);
logger.info("{} override {} for entity configuration", persistentClass.getClassName(),
old.getClassName());
}
classes.put(persistentClass.getMappedClass().getName(), (PersistentClass) classes.get(entityName));
}
@Override
public void addCollection(Collection collection) throws DuplicateMappingException {
collections.put(collection.getRole(), collection);
}
}
protected class StmartMetadataSourceQueue extends MetadataSourceQueue {
protected void syncAnnotatedClasses() {
}
}
}