diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/AnnotationConfiguration.java b/hibernate-core/src/main/java/org/hibernate/cfg/AnnotationConfiguration.java index b7458996bd..7963b77c6f 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/AnnotationConfiguration.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/AnnotationConfiguration.java @@ -22,6 +22,7 @@ * Boston, MA 02110-1301 USA */ package org.hibernate.cfg; + import java.io.File; import java.io.InputStream; import java.net.URL; @@ -30,6 +31,7 @@ import org.dom4j.Document; import org.hibernate.HibernateException; import org.hibernate.Interceptor; import org.hibernate.MappingException; +import org.hibernate.persister.PersisterClassProvider; /** * Similar to the {@link Configuration} object but handles EJB3 and Hibernate @@ -236,6 +238,12 @@ public class AnnotationConfiguration extends Configuration { return this; } + @Override + public AnnotationConfiguration setPersisterClassProvider(PersisterClassProvider persisterClassProvider) { + super.setPersisterClassProvider( persisterClassProvider ); + return this; + } + @Deprecated protected class ExtendedMappingsImpl extends MappingsImpl implements ExtendedMappings { } diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/Configuration.java b/hibernate-core/src/main/java/org/hibernate/cfg/Configuration.java index 62b2cd3d72..36a2a4bfb3 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/Configuration.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/Configuration.java @@ -144,6 +144,7 @@ import org.hibernate.mapping.SimpleValue; import org.hibernate.mapping.Table; import org.hibernate.mapping.TypeDef; import org.hibernate.mapping.UniqueKey; +import org.hibernate.persister.PersisterClassProvider; import org.hibernate.proxy.EntityNotFoundDelegate; import org.hibernate.secure.JACCConfiguration; import org.hibernate.service.spi.ServiceRegistry; @@ -258,6 +259,7 @@ public class Configuration implements Serializable { protected transient XMLHelper xmlHelper; protected NamingStrategy namingStrategy; + private PersisterClassProvider persisterClassProvider; private SessionFactoryObserver sessionFactoryObserver; private EventListeners eventListeners; @@ -355,6 +357,7 @@ public class Configuration implements Serializable { propertyRefResolver = new HashMap(); caches = new ArrayList(); namingStrategy = EJB3NamingStrategy.INSTANCE; + persisterClassProvider = null; setEntityResolver( new EJB3DTDEntityResolver() ); anyMetaDefs = new HashMap(); propertiesAnnotatedWithMapsId = new HashMap>(); @@ -2844,6 +2847,26 @@ public class Configuration implements Serializable { return this; } + public PersisterClassProvider getPersisterClassProvider() { + return persisterClassProvider; + } + + /** + * Defines a custom persister class provider. + * + * The persister class is chosen according to the following rules in decreasing priority: + * - the persister class defined explicitly via annotation or XML + * - the persister class returned by the PersisterClassProvider implementation (if not null) + * - the default provider as chosen by Hibernate Core (best choice most of the time) + * + * + * @param persisterClassProvider implementation + */ + public Configuration setPersisterClassProvider(PersisterClassProvider persisterClassProvider) { + this.persisterClassProvider = persisterClassProvider; + return this; + } + /** * Retrieve the IdentifierGeneratorFactory in effect for this configuration. * @@ -3076,6 +3099,14 @@ public class Configuration implements Serializable { Configuration.this.namingStrategy = namingStrategy; } + public PersisterClassProvider getPersisterClassProvider() { + return persisterClassProvider; + } + + public void setPersisterClassProvider(PersisterClassProvider persisterClassProvider) { + Configuration.this.persisterClassProvider = persisterClassProvider; + } + public TypeResolver getTypeResolver() { return typeResolver; } diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/Mappings.java b/hibernate-core/src/main/java/org/hibernate/cfg/Mappings.java index d83f2a1524..cbd97541a2 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/Mappings.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/Mappings.java @@ -22,6 +22,7 @@ * Boston, MA 02110-1301 USA */ package org.hibernate.cfg; + import java.io.Serializable; import java.util.Iterator; import java.util.List; @@ -49,6 +50,7 @@ import org.hibernate.mapping.MetadataSource; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.mapping.TypeDef; +import org.hibernate.persister.PersisterClassProvider; import org.hibernate.type.TypeResolver; /** @@ -87,6 +89,16 @@ public interface Mappings { */ public void setNamingStrategy(NamingStrategy namingStrategy); + /** + * Get the current persister class provider implementation + */ + public PersisterClassProvider getPersisterClassProvider(); + + /** + * Set the current persister class provider implementation + */ + public void setPersisterClassProvider(PersisterClassProvider persisterClassProvider); + /** * Returns the currently bound default schema name. * @@ -686,7 +698,8 @@ public interface Mappings { /** * @deprecated Use {@link #getUniqueConstraintHoldersByTable} instead */ - @SuppressWarnings({ "JavaDoc" }) + @Deprecated + @SuppressWarnings({ "JavaDoc" }) public Map> getTableUniqueConstraints(); public Map> getUniqueConstraintHoldersByTable(); @@ -694,7 +707,8 @@ public interface Mappings { /** * @deprecated Use {@link #addUniqueConstraintHolders} instead */ - @SuppressWarnings({ "JavaDoc" }) + @Deprecated + @SuppressWarnings({ "JavaDoc" }) public void addUniqueConstraints(Table table, List uniqueConstraints); public void addUniqueConstraintHolders(Table table, List uniqueConstraintHolders);