diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/AvailableSettings.java b/hibernate-core/src/main/java/org/hibernate/cfg/AvailableSettings.java
index d2333da20d..b34e16b61a 100644
--- a/hibernate-core/src/main/java/org/hibernate/cfg/AvailableSettings.java
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/AvailableSettings.java
@@ -230,23 +230,42 @@ public interface AvailableSettings {
@Deprecated
String JPA_METAMODEL_GENERATION = "hibernate.ejb.metamodel.generation";
+ /**
+ * Setting that indicates whether to build the JPA types. Accepts
+ * 3 values:
+ * -
+ * enabled - Do the build
+ *
+ * -
+ * disabled - Do not so the build
+ *
+ * -
+ * ignoreUnsupported - Do the build, but ignore any non-JPA features that would otherwise
+ * result in a failure.
+ *
+ *
+ *
+ *
+ */
+ @Deprecated
+ String JPA_METAMODEL_POPULATION = "hibernate.ejb.metamodel.population";
+
/**
* Setting that controls whether we seek out JPA "static metamodel" classes and populate them. Accepts
* 3 values:
* -
- * enabled - Do the population
+ * enabled -Do the population
*
* -
* disabled - Do not do the population
*
* -
- * ignoreUnsupported - Do the population, but ignore any non-JPA features that would otherwise
+ * skipUnsupported - Do the population, but ignore any non-JPA features that would otherwise
* result in the population failing.
*
*
- *
*/
- String JPA_METAMODEL_POPULATION = "hibernate.ejb.metamodel.population";
+ String STATIC_METAMODEL_POPULATION = "hibernate.jpa.static_metamodel.population";
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1492,11 +1511,4 @@ public interface AvailableSettings {
*/
String ALLOW_JTA_TRANSACTION_ACCESS = "hibernate.jta.allowTransactionAccess";
- /**
- * A setting to control whether Hibernate should scan for a static metamodel
- * or not. The default is {@code true}, i.e. Hibernate scans for static metamodel.
- * If you don't use a static metamodel in your project, then you can set this setting
- * to {@code false} to speed up deployment of your project.
- */
- String STATIC_METAMODEL_ENABLED = "hibernate.static_metamodel.enabled";
}
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/JpaStaticMetaModelPopulationSetting.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/JpaStaticMetaModelPopulationSetting.java
new file mode 100644
index 0000000000..d08dcb1d11
--- /dev/null
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/JpaStaticMetaModelPopulationSetting.java
@@ -0,0 +1,57 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
+ * See the lgpl.txt file in the root directory or .
+ */
+package org.hibernate.metamodel.internal;
+
+import java.util.Map;
+
+import org.hibernate.cfg.AvailableSettings;
+import org.hibernate.internal.util.config.ConfigurationHelper;
+
+/**
+ * Enumerated setting used to control whether Hibernate looks for and populates
+ * JPA static metamodel models of application's domain model.
+ *
+ * @author Andrea Boriero
+ */
+public enum JpaStaticMetaModelPopulationSetting {
+ /**
+ * ENABLED indicates that Hibernate will look for the JPA static metamodel description
+ * of the application domain model and populate it.
+ */
+ ENABLED,
+ /**
+ * DISABLED indicates that Hibernate will not look for the JPA static metamodel description
+ * of the application domain model.
+ */
+ DISABLED,
+ /**
+ * SKIP_UNSUPPORTED works as ENABLED but ignores any non-JPA features that would otherwise
+ * result in the population failing.
+ */
+ SKIP_UNSUPPORTED;
+
+ public static JpaStaticMetaModelPopulationSetting parse(String setting) {
+ if ( "enabled".equalsIgnoreCase( setting ) ) {
+ return ENABLED;
+ }
+ else if ( "disabled".equalsIgnoreCase( setting ) ) {
+ return DISABLED;
+ }
+ else {
+ return SKIP_UNSUPPORTED;
+ }
+ }
+
+ public static JpaStaticMetaModelPopulationSetting determineJpaMetaModelPopulationSetting(Map configurationValues) {
+ String setting = ConfigurationHelper.getString(
+ AvailableSettings.STATIC_METAMODEL_POPULATION,
+ configurationValues,
+ null
+ );
+ return JpaStaticMetaModelPopulationSetting.parse( setting );
+ }
+}
diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataContext.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataContext.java
index f9652496f3..bfaaf5f511 100755
--- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataContext.java
+++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataContext.java
@@ -22,7 +22,6 @@ import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.Type;
import org.hibernate.annotations.common.AssertionFailure;
-import org.hibernate.cfg.AvailableSettings;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.internal.EntityManagerMessageLogger;
import org.hibernate.internal.HEMLogging;
@@ -183,9 +182,8 @@ class MetadataContext {
LOG.trace( "Wrapping up metadata context..." );
}
- boolean staticMetamodelEnabled = Boolean.parseBoolean(
- sessionFactory.getProperties().getOrDefault(
- AvailableSettings.STATIC_METAMODEL_ENABLED, "true" ).toString() );
+ boolean staticMetamodelScanEnabled = JpaStaticMetaModelPopulationSetting
+ .determineJpaMetaModelPopulationSetting( sessionFactory.getProperties() ) != JpaStaticMetaModelPopulationSetting.DISABLED;
//we need to process types from superclasses to subclasses
for ( Object mapping : orderedMappings ) {
@@ -218,7 +216,7 @@ class MetadataContext {
}
}
jpa2Mapping.lock();
- if ( staticMetamodelEnabled ) {
+ if ( staticMetamodelScanEnabled ) {
populateStaticMetamodel( jpa2Mapping );
}
}
@@ -253,7 +251,7 @@ class MetadataContext {
}
}
jpa2Mapping.lock();
- if ( staticMetamodelEnabled ) {
+ if ( staticMetamodelScanEnabled ) {
populateStaticMetamodel( jpa2Mapping );
}
}
@@ -268,7 +266,7 @@ class MetadataContext {
}
}
- if ( staticMetamodelEnabled ) {
+ if ( staticMetamodelScanEnabled ) {
for ( EmbeddableTypeImpl embeddable : embeddables.values() ) {
populateStaticMetamodel( embeddable );
}