diff --git a/settings.gradle b/settings.gradle index 7f2c51283a..6d40f49b67 100644 --- a/settings.gradle +++ b/settings.gradle @@ -79,6 +79,7 @@ include "spring-boot-project:spring-boot-gson" include "spring-boot-project:spring-boot-h2console" include "spring-boot-project:spring-boot-hateoas" include "spring-boot-project:spring-boot-hazelcast" +include "spring-boot-project:spring-boot-hibernate" include "spring-boot-project:spring-boot-http-client" include "spring-boot-project:spring-boot-http-converter" include "spring-boot-project:spring-boot-http-codec" diff --git a/spring-boot-project/spring-boot-batch/build.gradle b/spring-boot-project/spring-boot-batch/build.gradle index ae3990de9b..6945f87c4a 100644 --- a/spring-boot-project/spring-boot-batch/build.gradle +++ b/spring-boot-project/spring-boot-batch/build.gradle @@ -16,7 +16,7 @@ dependencies { implementation(project(":spring-boot-project:spring-boot-tx")) optional(project(":spring-boot-project:spring-boot-autoconfigure")) - optional(project(":spring-boot-project:spring-boot-jpa")) + optional(project(":spring-boot-project:spring-boot-hibernate")) optional(project(":spring-boot-project:spring-boot-observation")) testImplementation(project(":spring-boot-project:spring-boot-flyway")) diff --git a/spring-boot-project/spring-boot-batch/src/main/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfiguration.java b/spring-boot-project/spring-boot-batch/src/main/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfiguration.java index e958fffc5a..c95280e655 100644 --- a/spring-boot-project/spring-boot-batch/src/main/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfiguration.java +++ b/spring-boot-project/spring-boot-batch/src/main/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfiguration.java @@ -70,7 +70,7 @@ import org.springframework.util.StringUtils; * @since 4.0.0 */ @AutoConfiguration(after = TransactionAutoConfiguration.class, - afterName = "org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration") + afterName = "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration") @ConditionalOnClass({ JobLauncher.class, DataSource.class, DatabasePopulator.class }) @ConditionalOnBean({ DataSource.class, PlatformTransactionManager.class }) @ConditionalOnMissingBean(value = DefaultBatchConfiguration.class, annotation = EnableBatchProcessing.class) diff --git a/spring-boot-project/spring-boot-batch/src/test/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfigurationTests.java b/spring-boot-project/spring-boot-batch/src/test/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfigurationTests.java index 31c9f40067..7adabfad75 100644 --- a/spring-boot-project/spring-boot-batch/src/test/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-batch/src/test/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfigurationTests.java @@ -61,12 +61,12 @@ import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage; import org.springframework.boot.batch.autoconfigure.BatchAutoConfiguration.SpringBootBatchConfiguration; import org.springframework.boot.batch.autoconfigure.domain.City; import org.springframework.boot.flyway.autoconfigure.FlywayAutoConfiguration; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.EmbeddedDataSourceConfiguration; import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.boot.liquibase.autoconfigure.LiquibaseAutoConfiguration; import org.springframework.boot.sql.init.DatabaseInitializationMode; import org.springframework.boot.sql.init.DatabaseInitializationSettings; diff --git a/spring-boot-project/spring-boot-cache/build.gradle b/spring-boot-project/spring-boot-cache/build.gradle index 01f47ad55c..dff4204386 100644 --- a/spring-boot-project/spring-boot-cache/build.gradle +++ b/spring-boot-project/spring-boot-cache/build.gradle @@ -18,7 +18,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-data-couchbase")) optional(project(":spring-boot-project:spring-boot-data-redis")) optional(project(":spring-boot-project:spring-boot-hazelcast")) - optional(project(":spring-boot-project:spring-boot-jpa")) + optional(project(":spring-boot-project:spring-boot-hibernate")) optional(project(":spring-boot-project:spring-boot-metrics")) optional("com.hazelcast:hazelcast-spring") optional("io.micrometer:micrometer-core") diff --git a/spring-boot-project/spring-boot-cache/src/main/java/org/springframework/boot/cache/autoconfigure/CacheAutoConfiguration.java b/spring-boot-project/spring-boot-cache/src/main/java/org/springframework/boot/cache/autoconfigure/CacheAutoConfiguration.java index 9db02e932c..9996b2ded0 100644 --- a/spring-boot-project/spring-boot-cache/src/main/java/org/springframework/boot/cache/autoconfigure/CacheAutoConfiguration.java +++ b/spring-boot-project/spring-boot-cache/src/main/java/org/springframework/boot/cache/autoconfigure/CacheAutoConfiguration.java @@ -54,7 +54,7 @@ import org.springframework.util.Assert; @AutoConfiguration(afterName = { "org.springframework.boot.data.couchbase.autoconfigure.CouchbaseDataAutoConfiguration", "org.springframework.boot.data.redis.autoconfigure.RedisAutoConfiguration", "org.springframework.boot.hazelcast.autoconfigure.HazelcastAutoConfiguration", - "org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration" }) + "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration" }) @ConditionalOnClass(CacheManager.class) @ConditionalOnBean(CacheAspectSupport.class) @ConditionalOnMissingBean(value = CacheManager.class, name = "cacheResolver") diff --git a/spring-boot-project/spring-boot-data-jpa/build.gradle b/spring-boot-project/spring-boot-data-jpa/build.gradle index 4a284b5712..d46b110cf3 100644 --- a/spring-boot-project/spring-boot-data-jpa/build.gradle +++ b/spring-boot-project/spring-boot-data-jpa/build.gradle @@ -10,7 +10,7 @@ description = "Spring Boot Data JPA" dependencies { api(project(":spring-boot-project:spring-boot-data-commons")) - api(project(":spring-boot-project:spring-boot-jpa")) + api(project(":spring-boot-project:spring-boot-hibernate")) api("org.springframework.data:spring-data-jpa") api("org.springframework:spring-aspects") diff --git a/spring-boot-project/spring-boot-data-jpa/src/main/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesAutoConfiguration.java b/spring-boot-project/spring-boot-data-jpa/src/main/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesAutoConfiguration.java index d2116c0641..be70e7fefd 100644 --- a/spring-boot-project/spring-boot-data-jpa/src/main/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesAutoConfiguration.java +++ b/spring-boot-project/spring-boot-data-jpa/src/main/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesAutoConfiguration.java @@ -30,8 +30,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.data.jpa.autoconfigure.JpaRepositoriesAutoConfiguration.JpaRepositoriesImportSelector; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; import org.springframework.boot.jpa.autoconfigure.EntityManagerFactoryBuilderCustomizer; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Import; diff --git a/spring-boot-project/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/AbstractJpaRepositoriesAutoConfigurationTests.java b/spring-boot-project/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/AbstractJpaRepositoriesAutoConfigurationTests.java index 6cb6dc6545..99bdfde16d 100644 --- a/spring-boot-project/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/AbstractJpaRepositoriesAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/AbstractJpaRepositoriesAutoConfigurationTests.java @@ -27,8 +27,8 @@ import org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfigurati import org.springframework.boot.data.jpa.autoconfigure.domain.city.City; import org.springframework.boot.data.jpa.autoconfigure.domain.city.CityRepository; import org.springframework.boot.data.jpa.autoconfigure.domain.country.Country; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.EmbeddedDataSourceConfiguration; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-project/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesSpringDataWebAutoConfigurationTests.java b/spring-boot-project/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesSpringDataWebAutoConfigurationTests.java index b75dd2a796..a689e75004 100644 --- a/spring-boot-project/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesSpringDataWebAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesSpringDataWebAutoConfigurationTests.java @@ -23,8 +23,8 @@ import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage; import org.springframework.boot.data.jpa.autoconfigure.domain.city.City; import org.springframework.boot.data.jpa.autoconfigure.domain.city.CityRepository; import org.springframework.boot.data.web.autoconfigure.SpringDataWebAutoConfiguration; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.context.annotation.Configuration; import org.springframework.data.geo.Distance; diff --git a/spring-boot-project/spring-boot-data-rest/src/test/java/org/springframework/boot/data/rest/autoconfigure/RepositoryRestMvcAutoConfigurationTests.java b/spring-boot-project/spring-boot-data-rest/src/test/java/org/springframework/boot/data/rest/autoconfigure/RepositoryRestMvcAutoConfigurationTests.java index f2676cf266..c57eb187d5 100644 --- a/spring-boot-project/spring-boot-data-rest/src/test/java/org/springframework/boot/data/rest/autoconfigure/RepositoryRestMvcAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-data-rest/src/test/java/org/springframework/boot/data/rest/autoconfigure/RepositoryRestMvcAutoConfigurationTests.java @@ -26,9 +26,9 @@ import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.data.jpa.autoconfigure.JpaRepositoriesAutoConfiguration; import org.springframework.boot.data.rest.domain.city.City; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.EmbeddedDataSourceConfiguration; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.boot.web.context.servlet.AnnotationConfigServletWebApplicationContext; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle index b0109e6666..84cab10e13 100644 --- a/spring-boot-project/spring-boot-docs/build.gradle +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -89,6 +89,7 @@ dependencies { autoConfiguration(project(path: ":spring-boot-project:spring-boot-h2console", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-hateoas", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-hazelcast", configuration: "autoConfigurationMetadata")) + autoConfiguration(project(path: ":spring-boot-project:spring-boot-hibernate", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-http-client", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-http-converter", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-http-codec", configuration: "autoConfigurationMetadata")) @@ -99,7 +100,6 @@ dependencies { autoConfiguration(project(path: ":spring-boot-project:spring-boot-jetty", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jms", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jooq", configuration: "autoConfigurationMetadata")) - autoConfiguration(project(path: ":spring-boot-project:spring-boot-jpa", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-jsonb", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-kafka", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-ldap", configuration: "autoConfigurationMetadata")) @@ -176,6 +176,7 @@ dependencies { configurationProperties(project(path: ":spring-boot-project:spring-boot-h2console", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-hateoas", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-hazelcast", configuration: "configurationPropertiesMetadata")) + configurationProperties(project(path: ":spring-boot-project:spring-boot-hibernate", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-http-client", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-http-converter", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-http-codec", configuration: "configurationPropertiesMetadata")) @@ -238,6 +239,7 @@ dependencies { implementation(project(path: ":spring-boot-project:spring-boot-data-neo4j")) implementation(project(path: ":spring-boot-project:spring-boot-devtools")) implementation(project(path: ":spring-boot-project:spring-boot-docker-compose")) + implementation(project(path: ":spring-boot-project:spring-boot-hibernate")) implementation(project(path: ":spring-boot-project:spring-boot-http-converter")) implementation(project(path: ":spring-boot-project:spring-boot-http-codec")) implementation(project(path: ":spring-boot-project:spring-boot-integration")) diff --git a/spring-boot-project/spring-boot-docs/src/main/java/org/springframework/boot/docs/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.java b/spring-boot-project/spring-boot-docs/src/main/java/org/springframework/boot/docs/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.java index c379a2e9e2..8b3b925b72 100644 --- a/spring-boot-project/spring-boot-docs/src/main/java/org/springframework/boot/docs/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.java +++ b/spring-boot-project/spring-boot-docs/src/main/java/org/springframework/boot/docs/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.java @@ -18,7 +18,7 @@ package org.springframework.boot.docs.howto.dataaccess.configurehibernatesecondl import org.hibernate.cache.jcache.ConfigSettings; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernatePropertiesCustomizer; +import org.springframework.boot.hibernate.autoconfigure.HibernatePropertiesCustomizer; import org.springframework.cache.jcache.JCacheCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-project/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.kt b/spring-boot-project/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.kt index e27906cad8..dee32df176 100644 --- a/spring-boot-project/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.kt +++ b/spring-boot-project/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.kt @@ -17,7 +17,7 @@ package org.springframework.boot.docs.howto.dataaccess.configurehibernatesecondlevelcaching import org.hibernate.cache.jcache.ConfigSettings -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernatePropertiesCustomizer +import org.springframework.boot.hibernate.autoconfigure.HibernatePropertiesCustomizer import org.springframework.cache.jcache.JCacheCacheManager import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration diff --git a/spring-boot-project/spring-boot-hazelcast/build.gradle b/spring-boot-project/spring-boot-hazelcast/build.gradle index 62239eeaea..8c2e50b501 100644 --- a/spring-boot-project/spring-boot-hazelcast/build.gradle +++ b/spring-boot-project/spring-boot-hazelcast/build.gradle @@ -18,7 +18,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-actuator-autoconfigure")) optional(project(":spring-boot-project:spring-boot-autoconfigure")) optional(project(":spring-boot-project:spring-boot-docker-compose")) - optional(project(":spring-boot-project:spring-boot-jpa")) + optional(project(":spring-boot-project:spring-boot-hibernate")) optional(project(":spring-boot-project:spring-boot-testcontainers")) optional("com.hazelcast:hazelcast-spring") optional("org.slf4j:slf4j-api") @@ -30,6 +30,7 @@ dependencies { testCompileOnly("com.fasterxml.jackson.core:jackson-annotations") + testImplementation(project(":spring-boot-project:spring-boot-hibernate")) testImplementation(project(":spring-boot-project:spring-boot-test")) testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) testImplementation(testFixtures(project(":spring-boot-project:spring-boot-testcontainers"))) diff --git a/spring-boot-project/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/autoconfigure/HazelcastJpaDependencyAutoConfiguration.java b/spring-boot-project/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/autoconfigure/HazelcastJpaDependencyAutoConfiguration.java index 4686777c8e..a3174de155 100644 --- a/spring-boot-project/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/autoconfigure/HazelcastJpaDependencyAutoConfiguration.java +++ b/spring-boot-project/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/autoconfigure/HazelcastJpaDependencyAutoConfiguration.java @@ -39,7 +39,7 @@ import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; * @since 4.0.0 */ @AutoConfiguration(after = HazelcastAutoConfiguration.class, - afterName = "org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration") + afterName = "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration") @ConditionalOnClass({ HazelcastInstance.class, LocalContainerEntityManagerFactoryBean.class }) @Import(HazelcastInstanceEntityManagerFactoryDependsOnConfiguration.class) public class HazelcastJpaDependencyAutoConfiguration { diff --git a/spring-boot-project/spring-boot-hazelcast/src/test/java/org/springframework/boot/hazelcast/autoconfigure/HazelcastJpaDependencyAutoConfigurationTests.java b/spring-boot-project/spring-boot-hazelcast/src/test/java/org/springframework/boot/hazelcast/autoconfigure/HazelcastJpaDependencyAutoConfigurationTests.java index cc208655ba..a1165ff714 100644 --- a/spring-boot-project/spring-boot-hazelcast/src/test/java/org/springframework/boot/hazelcast/autoconfigure/HazelcastJpaDependencyAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-hazelcast/src/test/java/org/springframework/boot/hazelcast/autoconfigure/HazelcastJpaDependencyAutoConfigurationTests.java @@ -27,9 +27,9 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.hazelcast.autoconfigure.HazelcastJpaDependencyAutoConfiguration.HazelcastInstanceEntityManagerFactoryDependsOnPostProcessor; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jpa.autoconfigure.EntityManagerFactoryDependsOnPostProcessor; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.boot.test.context.assertj.AssertableApplicationContext; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-project/spring-boot-hibernate/build.gradle b/spring-boot-project/spring-boot-hibernate/build.gradle new file mode 100644 index 0000000000..3b37fa586c --- /dev/null +++ b/spring-boot-project/spring-boot-hibernate/build.gradle @@ -0,0 +1,40 @@ +plugins { + id "java-library" + id "org.springframework.boot.auto-configuration" + id "org.springframework.boot.configuration-properties" + id "org.springframework.boot.deployed" + id "org.springframework.boot.optional-dependencies" +} + +description = "Spring Boot Hibernate" + +dependencies { + api(project(":spring-boot-project:spring-boot-jpa")) + api("org.hibernate.orm:hibernate-core") + api("org.springframework:spring-orm") + + optional(project(":spring-boot-project:spring-boot-autoconfigure")) + optional(project(":spring-boot-project:spring-boot-metrics")) + optional("org.hibernate.orm:hibernate-micrometer") + + testImplementation(project(":spring-boot-project:spring-boot-flyway")) + testImplementation(project(":spring-boot-project:spring-boot-liquibase")) + testImplementation(project(":spring-boot-project:spring-boot-test")) + testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) + testImplementation(testFixtures(project(":spring-boot-project:spring-boot-autoconfigure"))) + testImplementation("com.zaxxer:HikariCP") + testImplementation("javax.cache:cache-api") + testImplementation("org.ehcache:ehcache") { + artifact { + classifier = 'jakarta' + } + } + testImplementation("jakarta.servlet:jakarta.servlet-api") + testImplementation("org.hibernate.orm:hibernate-envers") + testImplementation("org.hibernate.orm:hibernate-jcache") + testImplementation("org.springframework:spring-context-support") + testImplementation("org.springframework:spring-webmvc") + + testRuntimeOnly("ch.qos.logback:logback-classic") + testRuntimeOnly("com.h2database:h2") +} diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/SpringImplicitNamingStrategy.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/SpringImplicitNamingStrategy.java similarity index 97% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/SpringImplicitNamingStrategy.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/SpringImplicitNamingStrategy.java index 39970bcc93..369abbeaed 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/SpringImplicitNamingStrategy.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/SpringImplicitNamingStrategy.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.hibernate; +package org.springframework.boot.hibernate; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.naming.ImplicitJoinTableNameSource; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/SpringJtaPlatform.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/SpringJtaPlatform.java similarity index 97% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/SpringJtaPlatform.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/SpringJtaPlatform.java index e2d2a12d9e..7f2658c005 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/SpringJtaPlatform.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/SpringJtaPlatform.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.hibernate; +package org.springframework.boot.hibernate; import jakarta.transaction.TransactionManager; import jakarta.transaction.UserTransaction; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateDefaultDdlAutoProvider.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateDefaultDdlAutoProvider.java similarity index 96% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateDefaultDdlAutoProvider.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateDefaultDdlAutoProvider.java index 4e85dd7b6e..4e8e61c56c 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateDefaultDdlAutoProvider.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateDefaultDdlAutoProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import java.util.stream.StreamSupport; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaAutoConfiguration.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaAutoConfiguration.java similarity index 97% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaAutoConfiguration.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaAutoConfiguration.java index 52d80ac3e5..1f8d867ef7 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaAutoConfiguration.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import jakarta.persistence.EntityManager; import org.hibernate.engine.spi.SessionImplementor; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaConfiguration.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaConfiguration.java similarity index 97% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaConfiguration.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaConfiguration.java index 2723aaee49..b4f471d110 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaConfiguration.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import java.util.ArrayList; import java.util.Arrays; @@ -44,15 +44,15 @@ import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.hibernate.SpringImplicitNamingStrategy; +import org.springframework.boot.hibernate.SpringJtaPlatform; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration.HibernateRuntimeHints; import org.springframework.boot.jdbc.SchemaManagementProvider; import org.springframework.boot.jdbc.metadata.CompositeDataSourcePoolMetadataProvider; import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadata; import org.springframework.boot.jdbc.metadata.DataSourcePoolMetadataProvider; import org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration; import org.springframework.boot.jpa.autoconfigure.JpaProperties; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaConfiguration.HibernateRuntimeHints; -import org.springframework.boot.jpa.hibernate.SpringImplicitNamingStrategy; -import org.springframework.boot.jpa.hibernate.SpringJtaPlatform; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportRuntimeHints; import org.springframework.jdbc.support.SQLExceptionTranslator; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/HibernateMetricsAutoConfiguration.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateMetricsAutoConfiguration.java similarity index 96% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/HibernateMetricsAutoConfiguration.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateMetricsAutoConfiguration.java index b312408e66..efc364b2da 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/HibernateMetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateMetricsAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.hibernate.metrics.autoconfigure; +package org.springframework.boot.hibernate.autoconfigure; import java.util.Collections; import java.util.Map; @@ -32,7 +32,6 @@ import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.util.StringUtils; /** diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateProperties.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateProperties.java similarity index 97% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateProperties.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateProperties.java index c7b02b6943..6069bb24a6 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateProperties.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import java.util.Collection; import java.util.HashMap; @@ -27,8 +27,8 @@ import org.hibernate.cfg.PersistenceSettings; import org.hibernate.cfg.SchemaToolingSettings; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.hibernate.SpringImplicitNamingStrategy; import org.springframework.boot.jpa.autoconfigure.JpaProperties; -import org.springframework.boot.jpa.hibernate.SpringImplicitNamingStrategy; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernatePropertiesCustomizer.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernatePropertiesCustomizer.java similarity index 94% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernatePropertiesCustomizer.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernatePropertiesCustomizer.java index 3441898d99..e946afed5d 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernatePropertiesCustomizer.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernatePropertiesCustomizer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import java.util.Map; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateSettings.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateSettings.java similarity index 96% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateSettings.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateSettings.java index 85d85d7073..f77446096d 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateSettings.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/HibernateSettings.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import java.util.ArrayList; import java.util.Collection; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/package-info.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/package-info.java similarity index 91% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/package-info.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/package-info.java index 7842715795..f354364719 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/hibernate/package-info.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/autoconfigure/package-info.java @@ -17,4 +17,4 @@ /** * Auto-configuration for JPA and Spring ORM. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/package-info.java b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/package-info.java similarity index 93% rename from spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/package-info.java rename to spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/package-info.java index 24d2a53dd7..03b0716cf9 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/package-info.java +++ b/spring-boot-project/spring-boot-hibernate/src/main/java/org/springframework/boot/hibernate/package-info.java @@ -17,4 +17,4 @@ /** * Hibernate Support classes. */ -package org.springframework.boot.jpa.hibernate; +package org.springframework.boot.hibernate; diff --git a/spring-boot-project/spring-boot-hibernate/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-hibernate/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000000..ccb70ad131 --- /dev/null +++ b/spring-boot-project/spring-boot-hibernate/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,75 @@ +{ + "groups": [], + "properties": [ + { + "name": "spring.jpa.hibernate.use-new-id-generator-mappings", + "type": "java.lang.Boolean", + "description": "Whether to use Hibernate's newer IdentifierGenerator for AUTO, TABLE and SEQUENCE. This is actually a shortcut for the \"hibernate.id.new_generator_mappings\" property. When not specified will default to \"true\".", + "deprecation": { + "level": "error", + "reason": "Hibernate no longer supports disabling the use of new ID generator mappings." + } + } + ], + "hints": [ + { + "name": "spring.jpa.hibernate.ddl-auto", + "values": [ + { + "value": "create", + "description": "Create the schema and destroy previous data." + }, + { + "value": "create-drop", + "description": "Create and then destroy the schema at the end of the session." + }, + { + "value": "create-only", + "description": "Create the schema." + }, + { + "value": "drop", + "description": "Drop the schema." + }, + { + "value": "none", + "description": "Disable DDL handling." + }, + { + "value": "truncate", + "description": "Truncate the tables in the schema." + }, + { + "value": "update", + "description": "Update the schema if necessary." + }, + { + "value": "validate", + "description": "Validate the schema, make no changes to the database." + } + ] + }, + { + "name": "spring.jpa.hibernate.naming.implicit-strategy", + "providers": [ + { + "name": "class-reference", + "parameters": { + "target": "org.hibernate.boot.model.naming.ImplicitNamingStrategy" + } + } + ] + }, + { + "name": "spring.jpa.hibernate.naming.physical-strategy", + "providers": [ + { + "name": "class-reference", + "parameters": { + "target": "org.hibernate.boot.model.naming.PhysicalNamingStrategy" + } + } + ] + } + ] +} diff --git a/spring-boot-project/spring-boot-hibernate/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-hibernate/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000000..ec3da91d5f --- /dev/null +++ b/spring-boot-project/spring-boot-hibernate/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration +org.springframework.boot.hibernate.autoconfigure.HibernateMetricsAutoConfiguration diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/CustomHibernateJpaAutoConfigurationTests.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/CustomHibernateJpaAutoConfigurationTests.java similarity index 99% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/CustomHibernateJpaAutoConfigurationTests.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/CustomHibernateJpaAutoConfigurationTests.java index 26e1bb3f26..3e65a4eec3 100644 --- a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/CustomHibernateJpaAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/CustomHibernateJpaAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import java.sql.Connection; import java.sql.DatabaseMetaData; diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/Hibernate2ndLevelCacheIntegrationTests.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/Hibernate2ndLevelCacheIntegrationTests.java similarity index 97% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/Hibernate2ndLevelCacheIntegrationTests.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/Hibernate2ndLevelCacheIntegrationTests.java index 522410dbdd..bcf2de2f7f 100644 --- a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/Hibernate2ndLevelCacheIntegrationTests.java +++ b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/Hibernate2ndLevelCacheIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import javax.cache.CacheManager; import javax.cache.Caching; diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateDefaultDdlAutoProviderTests.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateDefaultDdlAutoProviderTests.java similarity index 98% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateDefaultDdlAutoProviderTests.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateDefaultDdlAutoProviderTests.java index 8f59764fa4..29b30c7002 100644 --- a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateDefaultDdlAutoProviderTests.java +++ b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateDefaultDdlAutoProviderTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import java.util.Collections; diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaAutoConfigurationTests.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaAutoConfigurationTests.java similarity index 59% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaAutoConfigurationTests.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaAutoConfigurationTests.java index c202363f52..05085add7e 100644 --- a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernateJpaAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaAutoConfigurationTests.java @@ -14,9 +14,14 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; +import java.io.File; import java.io.IOException; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; @@ -26,6 +31,8 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.function.Consumer; import javax.sql.DataSource; @@ -33,6 +40,8 @@ import javax.sql.DataSource; import com.zaxxer.hikari.HikariDataSource; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.metamodel.ManagedType; +import jakarta.persistence.spi.PersistenceUnitInfo; import jakarta.transaction.Synchronization; import jakarta.transaction.Transaction; import jakarta.transaction.TransactionManager; @@ -59,27 +68,40 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage; import org.springframework.boot.flyway.autoconfigure.FlywayAutoConfiguration; +import org.springframework.boot.hibernate.SpringImplicitNamingStrategy; +import org.springframework.boot.hibernate.SpringJtaPlatform; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfigurationTests.JpaUsingApplicationListenerConfiguration.EventCapturingApplicationListener; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration.HibernateRuntimeHints; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; +import org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.XADataSourceAutoConfiguration; -import org.springframework.boot.jpa.autoconfigure.AbstractJpaAutoConfigurationTests; +import org.springframework.boot.jpa.EntityManagerFactoryBuilder; import org.springframework.boot.jpa.autoconfigure.EntityManagerFactoryBuilderCustomizer; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfigurationTests.JpaUsingApplicationListenerConfiguration.EventCapturingApplicationListener; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaConfiguration.HibernateRuntimeHints; +import org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration; +import org.springframework.boot.jpa.autoconfigure.JpaProperties; import org.springframework.boot.jpa.autoconfigure.hibernate.mapping.NonAnnotatedEntity; import org.springframework.boot.jpa.autoconfigure.test.city.City; -import org.springframework.boot.jpa.hibernate.SpringImplicitNamingStrategy; -import org.springframework.boot.jpa.hibernate.SpringJtaPlatform; +import org.springframework.boot.jpa.autoconfigure.test.country.Country; import org.springframework.boot.liquibase.autoconfigure.LiquibaseAutoConfiguration; import org.springframework.boot.sql.init.dependency.DependsOnDatabaseInitialization; import org.springframework.boot.test.context.assertj.AssertableApplicationContext; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ContextConsumer; +import org.springframework.boot.test.context.runner.WebApplicationContextRunner; +import org.springframework.boot.testsupport.BuildOutput; import org.springframework.boot.testsupport.classpath.resources.WithResource; +import org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration; +import org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration; import org.springframework.boot.transaction.jta.autoconfigure.JtaAutoConfiguration; +import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.SQLExceptionTranslator; @@ -87,8 +109,15 @@ import org.springframework.jdbc.support.SQLStateSQLExceptionTranslator; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.JpaVendorAdapter; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager; +import org.springframework.orm.jpa.persistenceunit.ManagedClassNameFilter; +import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes; +import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager; +import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter; +import org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; import static org.assertj.core.api.Assertions.assertThat; @@ -97,25 +126,243 @@ import static org.assertj.core.api.Assertions.entry; import static org.mockito.Mockito.mock; /** - * Tests for {@link HibernateJpaAutoConfiguration}. + * Base for JPA tests and tests for {@link JpaBaseConfiguration}. * - * @author Dave Syer * @author Phillip Webb + * @author Dave Syer + * @author Stephane Nicoll + * @author Yanming Zhou * @author Andy Wilkinson * @author Kazuki Shimizu - * @author Stephane Nicoll * @author Chris Bono * @author Moritz Halbritter */ -class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTests { +class HibernateJpaAutoConfigurationTests { - HibernateJpaAutoConfigurationTests() { - super(HibernateJpaAutoConfiguration.class); + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withPropertyValues("spring.datasource.generate-unique-name=true", + "spring.jta.log-dir=" + new File(new BuildOutput(getClass()).getRootLocation(), "transaction-logs")) + .withUserConfiguration(TestConfiguration.class) + .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, TransactionAutoConfiguration.class, + TransactionManagerCustomizationAutoConfiguration.class, DataSourceInitializationAutoConfiguration.class, + HibernateJpaAutoConfiguration.class)); + + @Test + void notConfiguredIfDataSourceIsNotAvailable() { + new ApplicationContextRunner().withConfiguration(AutoConfigurations.of(HibernateJpaAutoConfiguration.class)) + .run(assertJpaIsNotAutoConfigured()); + } + + @Test + void notConfiguredIfNoSingleDataSourceCandidateIsAvailable() { + new ApplicationContextRunner().withConfiguration(AutoConfigurations.of(HibernateJpaAutoConfiguration.class)) + .withUserConfiguration(TestTwoDataSourcesConfiguration.class) + .run(assertJpaIsNotAutoConfigured()); + } + + protected ContextConsumer assertJpaIsNotAutoConfigured() { + return (context) -> { + assertThat(context).hasNotFailed(); + assertThat(context).hasSingleBean(JpaProperties.class); + assertThat(context).doesNotHaveBean(TransactionManager.class); + assertThat(context).doesNotHaveBean(EntityManagerFactory.class); + }; + } + + @Test + void configuredWithAutoConfiguredDataSource() { + this.contextRunner.run((context) -> { + assertThat(context).hasSingleBean(DataSource.class); + assertThat(context).hasSingleBean(JpaTransactionManager.class); + assertThat(context).hasSingleBean(EntityManagerFactory.class); + assertThat(context).hasSingleBean(PersistenceManagedTypes.class); + }); + } + + @Test + void configuredWithSingleCandidateDataSource() { + this.contextRunner.withUserConfiguration(TestTwoDataSourcesAndPrimaryConfiguration.class).run((context) -> { + assertThat(context).getBeans(DataSource.class).hasSize(2); + assertThat(context).hasSingleBean(JpaTransactionManager.class); + assertThat(context).hasSingleBean(EntityManagerFactory.class); + assertThat(context).hasSingleBean(PersistenceManagedTypes.class); + }); + } + + @Test + void jpaTransactionManagerTakesPrecedenceOverSimpleDataSourceOne() { + this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceTransactionManagerAutoConfiguration.class)) + .run((context) -> { + assertThat(context).hasSingleBean(DataSource.class); + assertThat(context).hasSingleBean(JpaTransactionManager.class); + assertThat(context).getBean("transactionManager").isInstanceOf(JpaTransactionManager.class); + }); + } + + @Test + void openEntityManagerInViewInterceptorIsCreated() { + new WebApplicationContextRunner().withPropertyValues("spring.datasource.generate-unique-name=true") + .withUserConfiguration(TestConfiguration.class) + .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, + TransactionAutoConfiguration.class, HibernateJpaAutoConfiguration.class)) + .run((context) -> assertThat(context).hasSingleBean(OpenEntityManagerInViewInterceptor.class)); + } + + @Test + void openEntityManagerInViewInterceptorIsNotRegisteredWhenFilterPresent() { + new WebApplicationContextRunner().withPropertyValues("spring.datasource.generate-unique-name=true") + .withUserConfiguration(TestFilterConfiguration.class) + .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, + TransactionAutoConfiguration.class, HibernateJpaAutoConfiguration.class)) + .run((context) -> assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class)); + } + + @Test + void openEntityManagerInViewInterceptorIsNotRegisteredWhenFilterRegistrationPresent() { + new WebApplicationContextRunner().withPropertyValues("spring.datasource.generate-unique-name=true") + .withUserConfiguration(TestFilterRegistrationConfiguration.class) + .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, + TransactionAutoConfiguration.class, HibernateJpaAutoConfiguration.class)) + .run((context) -> assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class)); + } + + @Test + void openEntityManagerInViewInterceptorAutoConfigurationBacksOffWhenManuallyRegistered() { + new WebApplicationContextRunner().withPropertyValues("spring.datasource.generate-unique-name=true") + .withUserConfiguration(TestInterceptorManualConfiguration.class) + .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, + TransactionAutoConfiguration.class, HibernateJpaAutoConfiguration.class)) + .run((context) -> assertThat(context).getBean(OpenEntityManagerInViewInterceptor.class) + .isExactlyInstanceOf( + TestInterceptorManualConfiguration.ManualOpenEntityManagerInViewInterceptor.class)); + } + + @Test + void openEntityManagerInViewInterceptorIsNotRegisteredWhenExplicitlyOff() { + new WebApplicationContextRunner() + .withPropertyValues("spring.datasource.generate-unique-name=true", "spring.jpa.open-in-view=false") + .withUserConfiguration(TestConfiguration.class) + .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, + TransactionAutoConfiguration.class, HibernateJpaAutoConfiguration.class)) + .run((context) -> assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class)); + } + + @Test + void customJpaProperties() { + this.contextRunner + .withPropertyValues("spring.jpa.properties.a:b", "spring.jpa.properties.a.b:c", "spring.jpa.properties.c:d") + .run((context) -> { + LocalContainerEntityManagerFactoryBean bean = context + .getBean(LocalContainerEntityManagerFactoryBean.class); + Map map = bean.getJpaPropertyMap(); + assertThat(map).containsEntry("a", "b"); + assertThat(map).containsEntry("c", "d"); + assertThat(map).containsEntry("a.b", "c"); + }); + } + + @Test + @WithMetaInfPersistenceXmlResource + void usesManuallyDefinedLocalContainerEntityManagerFactoryBeanUsingBuilder() { + this.contextRunner.withPropertyValues("spring.jpa.properties.a=b") + .withUserConfiguration(TestConfigurationWithEntityManagerFactoryBuilder.class) + .run((context) -> { + LocalContainerEntityManagerFactoryBean factoryBean = context + .getBean(LocalContainerEntityManagerFactoryBean.class); + Map map = factoryBean.getJpaPropertyMap(); + assertThat(map).containsEntry("configured", "manually").containsEntry("a", "b"); + }); + } + + @Test + @WithMetaInfPersistenceXmlResource + void usesManuallyDefinedLocalContainerEntityManagerFactoryBeanIfAvailable() { + this.contextRunner.withUserConfiguration(TestConfigurationWithLocalContainerEntityManagerFactoryBean.class) + .run((context) -> { + LocalContainerEntityManagerFactoryBean factoryBean = context + .getBean(LocalContainerEntityManagerFactoryBean.class); + Map map = factoryBean.getJpaPropertyMap(); + assertThat(map).containsEntry("configured", "manually"); + }); + } + + @Test + @WithMetaInfPersistenceXmlResource + void usesManuallyDefinedEntityManagerFactoryIfAvailable() { + this.contextRunner.withUserConfiguration(TestConfigurationWithLocalContainerEntityManagerFactoryBean.class) + .run((context) -> { + EntityManagerFactory factoryBean = context.getBean(EntityManagerFactory.class); + Map map = factoryBean.getProperties(); + assertThat(map).containsEntry("configured", "manually"); + }); + } + + @Test + void usesManuallyDefinedTransactionManagerBeanIfAvailable() { + this.contextRunner.withUserConfiguration(TestConfigurationWithTransactionManager.class).run((context) -> { + assertThat(context).hasSingleBean(JpaTransactionManager.class); + JpaTransactionManager txManager = context.getBean(JpaTransactionManager.class); + assertThat(txManager).isInstanceOf(CustomJpaTransactionManager.class); + }); + } + + @Test + void defaultPersistenceManagedTypes() { + this.contextRunner.run((context) -> { + assertThat(context).hasSingleBean(PersistenceManagedTypes.class); + EntityManager entityManager = context.getBean(EntityManagerFactory.class).createEntityManager(); + assertThat(getManagedJavaTypes(entityManager)).contains(City.class).doesNotContain(Country.class); + }); + } + + @Test + void customPersistenceManagedTypes() { + this.contextRunner + .withBean(PersistenceManagedTypes.class, () -> PersistenceManagedTypes.of(Country.class.getName())) + .run((context) -> { + assertThat(context).hasSingleBean(PersistenceManagedTypes.class); + EntityManager entityManager = context.getBean(EntityManagerFactory.class).createEntityManager(); + assertThat(getManagedJavaTypes(entityManager)).contains(Country.class).doesNotContain(City.class); + }); + } + + @Test + void customPersistenceUnitManager() { + this.contextRunner.withUserConfiguration(TestConfigurationWithCustomPersistenceUnitManager.class) + .run((context) -> { + LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = context + .getBean(LocalContainerEntityManagerFactoryBean.class); + assertThat(entityManagerFactoryBean).hasFieldOrPropertyWithValue("persistenceUnitManager", + context.getBean(PersistenceUnitManager.class)); + }); + } + + @Test + void customPersistenceUnitPostProcessors() { + this.contextRunner.withUserConfiguration(TestConfigurationWithCustomPersistenceUnitPostProcessors.class) + .run((context) -> { + LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = context + .getBean(LocalContainerEntityManagerFactoryBean.class); + PersistenceUnitInfo persistenceUnitInfo = entityManagerFactoryBean.getPersistenceUnitInfo(); + assertThat(persistenceUnitInfo).isNotNull(); + assertThat(persistenceUnitInfo.getManagedClassNames()) + .contains("customized.attribute.converter.class.name"); + }); + } + + @Test + void customManagedClassNameFilter() { + this.contextRunner.withBean(ManagedClassNameFilter.class, () -> (s) -> !s.endsWith("City")) + .withUserConfiguration(AutoConfigurePackageForCountry.class) + .run((context) -> { + EntityManager entityManager = context.getBean(EntityManagerFactory.class).createEntityManager(); + assertThat(getManagedJavaTypes(entityManager)).contains(Country.class).doesNotContain(City.class); + }); } @Test void testDmlScriptWithMissingDdl() { - contextRunner().withPropertyValues("spring.sql.init.data-locations:classpath:/city.sql", + this.contextRunner.withPropertyValues("spring.sql.init.data-locations:classpath:/city.sql", // Missing: "spring.sql.init.schema-locations:classpath:/ddl.sql") .run((context) -> { @@ -128,7 +375,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes void testDmlScript() { // This can't succeed because the data SQL is executed immediately after the // schema and Hibernate hasn't initialized yet at that point - contextRunner().withPropertyValues("spring.sql.init.data-locations:/city.sql").run((context) -> { + this.contextRunner.withPropertyValues("spring.sql.init.data-locations:/city.sql").run((context) -> { assertThat(context).hasFailed(); assertThat(context.getStartupFailure()).isInstanceOf(BeanCreationException.class); }); @@ -138,7 +385,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @WithResource(name = "city.sql", content = "INSERT INTO CITY (ID, NAME, STATE, COUNTRY, MAP) values (2000, 'Washington', 'DC', 'US', 'Google')") void testDmlScriptRunsEarly() { - contextRunner().withUserConfiguration(TestInitializedJpaConfiguration.class) + this.contextRunner.withUserConfiguration(TestInitializedJpaConfiguration.class) .withClassLoader(new HideDataScriptClassLoader()) .withPropertyValues("spring.jpa.show-sql=true", "spring.jpa.properties.hibernate.format_sql=true", "spring.jpa.properties.hibernate.highlight_sql=true", "spring.jpa.hibernate.ddl-auto:create-drop", @@ -158,7 +405,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes ); """) void testFlywaySwitchOffDdlAuto() { - contextRunner().withPropertyValues("spring.sql.init.mode:never", "spring.flyway.locations:classpath:db/city") + this.contextRunner.withPropertyValues("spring.sql.init.mode:never", "spring.flyway.locations:classpath:db/city") .withConfiguration(AutoConfigurations.of(FlywayAutoConfiguration.class)) .run((context) -> assertThat(context).hasNotFailed()); } @@ -176,7 +423,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes ); """) void testFlywayPlusValidation() { - contextRunner() + this.contextRunner .withPropertyValues("spring.sql.init.mode:never", "spring.flyway.locations:classpath:db/city", "spring.jpa.hibernate.ddl-auto:validate") .withConfiguration(AutoConfigurations.of(FlywayAutoConfiguration.class)) @@ -225,7 +472,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes nullable: true """) void testLiquibasePlusValidation() { - contextRunner() + this.contextRunner .withPropertyValues("spring.liquibase.change-log:classpath:db/changelog/db.changelog-city.yaml", "spring.jpa.hibernate.ddl-auto:validate") .withConfiguration(AutoConfigurations.of(LiquibaseAutoConfiguration.class)) @@ -234,14 +481,14 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void hibernateDialectIsNotSetByDefault() { - contextRunner().run(assertJpaVendorAdapter( + this.contextRunner.run(assertJpaVendorAdapter( (adapter) -> assertThat(adapter.getJpaPropertyMap()).doesNotContainKeys("hibernate.dialect"))); } @Test void shouldConfigureHibernateJpaDialectWithSqlExceptionTranslatorIfPresent() { SQLStateSQLExceptionTranslator sqlExceptionTranslator = new SQLStateSQLExceptionTranslator(); - contextRunner().withBean(SQLStateSQLExceptionTranslator.class, () -> sqlExceptionTranslator) + this.contextRunner.withBean(SQLStateSQLExceptionTranslator.class, () -> sqlExceptionTranslator) .run(assertJpaVendorAdapter((adapter) -> assertThat(adapter.getJpaDialect()) .hasFieldOrPropertyWithValue("jdbcExceptionTranslator", sqlExceptionTranslator))); } @@ -250,7 +497,8 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes void shouldNotConfigureHibernateJpaDialectWithSqlExceptionTranslatorIfNotUnique() { SQLStateSQLExceptionTranslator sqlExceptionTranslator1 = new SQLStateSQLExceptionTranslator(); SQLStateSQLExceptionTranslator sqlExceptionTranslator2 = new SQLStateSQLExceptionTranslator(); - contextRunner().withBean("sqlExceptionTranslator1", SQLExceptionTranslator.class, () -> sqlExceptionTranslator1) + this.contextRunner + .withBean("sqlExceptionTranslator1", SQLExceptionTranslator.class, () -> sqlExceptionTranslator1) .withBean("sqlExceptionTranslator2", SQLExceptionTranslator.class, () -> sqlExceptionTranslator2) .run(assertJpaVendorAdapter((adapter) -> assertThat(adapter.getJpaDialect()) .hasFieldOrPropertyWithValue("jdbcExceptionTranslator", null))); @@ -258,7 +506,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void hibernateDialectIsSetWhenDatabaseIsSet() { - contextRunner().withPropertyValues("spring.jpa.database=H2") + this.contextRunner.withPropertyValues("spring.jpa.database=H2") .run(assertJpaVendorAdapter((adapter) -> assertThat(adapter.getJpaPropertyMap()) .contains(entry("hibernate.dialect", H2Dialect.class.getName())))); } @@ -266,7 +514,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void hibernateDialectIsSetWhenDatabasePlatformIsSet() { String databasePlatform = TestH2Dialect.class.getName(); - contextRunner().withPropertyValues("spring.jpa.database-platform=" + databasePlatform) + this.contextRunner.withPropertyValues("spring.jpa.database-platform=" + databasePlatform) .run(assertJpaVendorAdapter((adapter) -> assertThat(adapter.getJpaPropertyMap()) .contains(entry("hibernate.dialect", databasePlatform)))); } @@ -282,13 +530,13 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void jtaDefaultPlatform() { - contextRunner().withUserConfiguration(JtaTransactionManagerConfiguration.class) + this.contextRunner.withUserConfiguration(JtaTransactionManagerConfiguration.class) .run(assertJtaPlatform(SpringJtaPlatform.class)); } @Test void jtaCustomPlatform() { - contextRunner() + this.contextRunner .withPropertyValues( "spring.jpa.properties.hibernate.transaction.jta.platform:" + TestJtaPlatform.class.getName()) .withConfiguration(AutoConfigurations.of(JtaAutoConfiguration.class)) @@ -297,7 +545,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void jtaNotUsedByTheApplication() { - contextRunner().run(assertJtaPlatform(NoJtaPlatform.class)); + this.contextRunner.run(assertJtaPlatform(NoJtaPlatform.class)); } private ContextConsumer assertJtaPlatform(Class expectedType) { @@ -311,7 +559,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void jtaCustomTransactionManagerUsingProperties() { - contextRunner() + this.contextRunner .withPropertyValues("spring.transaction.default-timeout:30", "spring.transaction.rollback-on-commit-failure:true") .run((context) -> { @@ -323,7 +571,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void autoConfigurationBacksOffWithSeveralDataSources() { - contextRunner() + this.contextRunner .withConfiguration(AutoConfigurations.of(DataSourceTransactionManagerAutoConfiguration.class, XADataSourceAutoConfiguration.class, JtaAutoConfiguration.class)) .withUserConfiguration(TestTwoDataSourcesConfiguration.class) @@ -335,7 +583,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void providerDisablesAutoCommitIsConfigured() { - contextRunner() + this.contextRunner .withPropertyValues("spring.datasource.type:" + HikariDataSource.class.getName(), "spring.datasource.hikari.auto-commit:false") .run((context) -> { @@ -347,7 +595,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void providerDisablesAutoCommitIsNotConfiguredIfAutoCommitIsEnabled() { - contextRunner() + this.contextRunner .withPropertyValues("spring.datasource.type:" + HikariDataSource.class.getName(), "spring.datasource.hikari.auto-commit:true") .run((context) -> { @@ -359,7 +607,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void providerDisablesAutoCommitIsNotConfiguredIfPropertyIsSet() { - contextRunner() + this.contextRunner .withPropertyValues("spring.datasource.type:" + HikariDataSource.class.getName(), "spring.datasource.hikari.auto-commit:false", "spring.jpa.properties.hibernate.connection.provider_disables_autocommit=false") @@ -372,7 +620,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void providerDisablesAutoCommitIsNotConfiguredWithJta() { - contextRunner().withUserConfiguration(JtaTransactionManagerConfiguration.class) + this.contextRunner.withUserConfiguration(JtaTransactionManagerConfiguration.class) .withPropertyValues("spring.datasource.type:" + HikariDataSource.class.getName(), "spring.datasource.hikari.auto-commit:false") .run((context) -> { @@ -407,7 +655,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @WithResource(name = "non-annotated-data.sql", content = "INSERT INTO NON_ANNOTATED (id, item) values (2000, 'Test');") void customResourceMapping() { - contextRunner().withClassLoader(new HideDataScriptClassLoader()) + this.contextRunner.withClassLoader(new HideDataScriptClassLoader()) .withPropertyValues("spring.sql.init.data-locations:classpath:non-annotated-data.sql", "spring.jpa.mapping-resources=META-INF/mappings/non-annotated.xml", "spring.jpa.defer-datasource-initialization=true") @@ -421,7 +669,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void physicalNamingStrategyCanBeUsed() { - contextRunner().withUserConfiguration(TestPhysicalNamingStrategyConfiguration.class).run((context) -> { + this.contextRunner.withUserConfiguration(TestPhysicalNamingStrategyConfiguration.class).run((context) -> { Map hibernateProperties = getVendorProperties(context); assertThat(hibernateProperties) .contains(entry("hibernate.physical_naming_strategy", context.getBean("testPhysicalNamingStrategy"))); @@ -431,7 +679,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void implicitNamingStrategyCanBeUsed() { - contextRunner().withUserConfiguration(TestImplicitNamingStrategyConfiguration.class).run((context) -> { + this.contextRunner.withUserConfiguration(TestImplicitNamingStrategyConfiguration.class).run((context) -> { Map hibernateProperties = getVendorProperties(context); assertThat(hibernateProperties) .contains(entry("hibernate.implicit_naming_strategy", context.getBean("testImplicitNamingStrategy"))); @@ -441,7 +689,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void namingStrategyInstancesTakePrecedenceOverNamingStrategyProperties() { - contextRunner() + this.contextRunner .withUserConfiguration(TestPhysicalNamingStrategyConfiguration.class, TestImplicitNamingStrategyConfiguration.class) .withPropertyValues("spring.jpa.hibernate.naming.physical-strategy:com.example.Physical", @@ -457,7 +705,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void hibernatePropertiesCustomizerTakesPrecedenceOverStrategyInstancesAndNamingStrategyProperties() { - contextRunner() + this.contextRunner .withUserConfiguration(TestHibernatePropertiesCustomizerConfiguration.class, TestPhysicalNamingStrategyConfiguration.class, TestImplicitNamingStrategyConfiguration.class) .withPropertyValues("spring.jpa.hibernate.naming.physical-strategy:com.example.Physical", @@ -477,7 +725,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @WithResource(name = "city.sql", content = "INSERT INTO CITY (ID, NAME, STATE, COUNTRY, MAP) values (2000, 'Washington', 'DC', 'US', 'Google')") void eventListenerCanBeRegisteredAsBeans() { - contextRunner().withUserConfiguration(TestInitializedJpaConfiguration.class) + this.contextRunner.withUserConfiguration(TestInitializedJpaConfiguration.class) .withClassLoader(new HideDataScriptClassLoader()) .withPropertyValues("spring.jpa.show-sql=true", "spring.jpa.hibernate.ddl-auto:create-drop", "spring.sql.init.data-locations:classpath:/city.sql", @@ -491,13 +739,13 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void hibernatePropertiesCustomizerCanDisableBeanContainer() { - contextRunner().withUserConfiguration(DisableBeanContainerConfiguration.class) + this.contextRunner.withUserConfiguration(DisableBeanContainerConfiguration.class) .run((context) -> assertThat(context).doesNotHaveBean(City.class)); } @Test void vendorPropertiesWithEmbeddedDatabaseAndNoDdlProperty() { - contextRunner().run(vendorProperties((vendorProperties) -> { + this.contextRunner.run(vendorProperties((vendorProperties) -> { assertThat(vendorProperties).doesNotContainKeys(SchemaToolingSettings.JAKARTA_HBM2DDL_DATABASE_ACTION); assertThat(vendorProperties).containsEntry(SchemaToolingSettings.HBM2DDL_AUTO, "create-drop"); })); @@ -505,7 +753,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void vendorPropertiesWhenDdlAutoPropertyIsSet() { - contextRunner().withPropertyValues("spring.jpa.hibernate.ddl-auto=update") + this.contextRunner.withPropertyValues("spring.jpa.hibernate.ddl-auto=update") .run(vendorProperties((vendorProperties) -> { assertThat(vendorProperties).doesNotContainKeys(SchemaToolingSettings.JAKARTA_HBM2DDL_DATABASE_ACTION); assertThat(vendorProperties).containsEntry(SchemaToolingSettings.HBM2DDL_AUTO, "update"); @@ -514,7 +762,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void vendorPropertiesWhenDdlAutoPropertyAndHibernatePropertiesAreSet() { - contextRunner() + this.contextRunner .withPropertyValues("spring.jpa.hibernate.ddl-auto=update", "spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop") .run(vendorProperties((vendorProperties) -> { @@ -525,14 +773,14 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void vendorPropertiesWhenDdlAutoPropertyIsSetToNone() { - contextRunner().withPropertyValues("spring.jpa.hibernate.ddl-auto=none") + this.contextRunner.withPropertyValues("spring.jpa.hibernate.ddl-auto=none") .run(vendorProperties((vendorProperties) -> assertThat(vendorProperties).doesNotContainKeys( SchemaToolingSettings.JAKARTA_HBM2DDL_DATABASE_ACTION, SchemaToolingSettings.HBM2DDL_AUTO))); } @Test void vendorPropertiesWhenJpaDdlActionIsSet() { - contextRunner() + this.contextRunner .withPropertyValues("spring.jpa.properties.jakarta.persistence.schema-generation.database.action=create") .run(vendorProperties((vendorProperties) -> { assertThat(vendorProperties).containsEntry(SchemaToolingSettings.JAKARTA_HBM2DDL_DATABASE_ACTION, @@ -543,7 +791,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void vendorPropertiesWhenBothDdlAutoPropertiesAreSet() { - contextRunner() + this.contextRunner .withPropertyValues("spring.jpa.properties.jakarta.persistence.schema-generation.database.action=create", "spring.jpa.hibernate.ddl-auto=create-only") .run(vendorProperties((vendorProperties) -> { @@ -564,7 +812,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void withSyncBootstrappingAnApplicationListenerThatUsesJpaDoesNotTriggerABeanCurrentlyInCreationException() { - contextRunner().withUserConfiguration(JpaUsingApplicationListenerConfiguration.class).run((context) -> { + this.contextRunner.withUserConfiguration(JpaUsingApplicationListenerConfiguration.class).run((context) -> { assertThat(context).hasNotFailed(); EventCapturingApplicationListener listener = context.getBean(EventCapturingApplicationListener.class); assertThat(listener.events).hasSize(1); @@ -574,7 +822,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void withAsyncBootstrappingAnApplicationListenerThatUsesJpaDoesNotTriggerABeanCurrentlyInCreationException() { - contextRunner() + this.contextRunner .withUserConfiguration(AsyncBootstrappingConfiguration.class, JpaUsingApplicationListenerConfiguration.class) .run((context) -> { @@ -591,7 +839,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test @WithMetaInfPersistenceXmlResource void whenLocalContainerEntityManagerFactoryBeanHasNoJpaVendorAdapterAutoConfigurationSucceeds() { - contextRunner() + this.contextRunner .withUserConfiguration( TestConfigurationWithLocalContainerEntityManagerFactoryBeanWithNoJpaVendorAdapter.class) .run((context) -> { @@ -633,12 +881,12 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes // we're using an embedded database which means that HibernateProperties defaults // hibernate.hbm2ddl.auto to create-drop, replacing the // hibernate.hbm2ddl.auto=none that comes from generate-ddl being false. - contextRunner().run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); + this.contextRunner.run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); } @Test void whenSpringJpaGenerateDdlIsTrueThenTableIsCreated() { - contextRunner().withPropertyValues("spring.jpa.generate-ddl=true") + this.contextRunner.withPropertyValues("spring.jpa.generate-ddl=true") .run((context) -> assertThat(tablesFrom(context)).contains("CITY")); } @@ -648,19 +896,19 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes // This test fails because we're using an embedded database which means that // HibernateProperties defaults hibernate.hbm2ddl.auto to create-drop, replacing // the hibernate.hbm2ddl.auto=none that comes from setting generate-ddl to false. - contextRunner().withPropertyValues("spring.jpa.generate-ddl=false") + this.contextRunner.withPropertyValues("spring.jpa.generate-ddl=false") .run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); } @Test void whenHbm2DdlAutoIsNoneThenTableIsNotCreated() { - contextRunner().withPropertyValues("spring.jpa.properties.hibernate.hbm2ddl.auto=none") + this.contextRunner.withPropertyValues("spring.jpa.properties.hibernate.hbm2ddl.auto=none") .run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); } @Test void whenSpringJpaHibernateDdlAutoIsNoneThenTableIsNotCreated() { - contextRunner().withPropertyValues("spring.jpa.hibernate.ddl-auto=none") + this.contextRunner.withPropertyValues("spring.jpa.hibernate.ddl-auto=none") .run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); } @@ -670,19 +918,19 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes // This test fails because when ddl-auto is set to none, we remove // hibernate.hbm2ddl.auto from Hibernate properties. This then allows // spring.jpa.generate-ddl to set it to create-drop - contextRunner().withPropertyValues("spring.jpa.generate-ddl=true", "spring.jpa.hibernate.ddl-auto=none") + this.contextRunner.withPropertyValues("spring.jpa.generate-ddl=true", "spring.jpa.hibernate.ddl-auto=none") .run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); } @Test void whenSpringJpaGenerateDdlIsTrueAndSpringJpaHibernateDdlAutoIsDropThenTableIsNotCreated() { - contextRunner().withPropertyValues("spring.jpa.generate-ddl=true", "spring.jpa.hibernate.ddl-auto=drop") + this.contextRunner.withPropertyValues("spring.jpa.generate-ddl=true", "spring.jpa.hibernate.ddl-auto=drop") .run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); } @Test void whenSpringJpaGenerateDdlIsTrueAndJakartaSchemaGenerationIsNoneThenTableIsNotCreated() { - contextRunner() + this.contextRunner .withPropertyValues("spring.jpa.generate-ddl=true", "spring.jpa.properties.jakarta.persistence.schema-generation.database.action=none") .run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); @@ -690,7 +938,7 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes @Test void whenSpringJpaGenerateDdlIsTrueSpringJpaHibernateDdlAutoIsCreateAndJakartaSchemaGenerationIsNoneThenTableIsNotCreated() { - contextRunner() + this.contextRunner .withPropertyValues("spring.jpa.generate-ddl=true", "spring.jpa.hibernate.ddl-auto=create", "spring.jpa.properties.jakarta.persistence.schema-generation.database.action=none") .run((context) -> assertThat(tablesFrom(context)).doesNotContain("CITY")); @@ -704,6 +952,219 @@ class HibernateJpaAutoConfigurationTests extends AbstractJpaAutoConfigurationTes return tables; } + private Class[] getManagedJavaTypes(EntityManager entityManager) { + Set> managedTypes = entityManager.getMetamodel().getManagedTypes(); + return managedTypes.stream().map(ManagedType::getJavaType).toArray(Class[]::new); + } + + @Configuration(proxyBeanMethods = false) + protected static class TestTwoDataSourcesConfiguration { + + @Bean + DataSource firstDataSource() { + return createRandomDataSource(); + } + + @Bean + DataSource secondDataSource() { + return createRandomDataSource(); + } + + private DataSource createRandomDataSource() { + String url = "jdbc:h2:mem:init-" + UUID.randomUUID(); + return DataSourceBuilder.create().url(url).build(); + } + + } + + @Configuration(proxyBeanMethods = false) + static class TestTwoDataSourcesAndPrimaryConfiguration { + + @Bean + @Primary + DataSource firstDataSource() { + return createRandomDataSource(); + } + + @Bean + DataSource secondDataSource() { + return createRandomDataSource(); + } + + private DataSource createRandomDataSource() { + String url = "jdbc:h2:mem:init-" + UUID.randomUUID(); + return DataSourceBuilder.create().url(url).build(); + } + + } + + @Configuration(proxyBeanMethods = false) + @TestAutoConfigurationPackage(City.class) + protected static class TestConfiguration { + + } + + @Configuration(proxyBeanMethods = false) + @TestAutoConfigurationPackage(City.class) + static class TestFilterConfiguration { + + @Bean + OpenEntityManagerInViewFilter openEntityManagerInViewFilter() { + return new OpenEntityManagerInViewFilter(); + } + + } + + @Configuration(proxyBeanMethods = false) + @TestAutoConfigurationPackage(City.class) + static class TestFilterRegistrationConfiguration { + + @Bean + FilterRegistrationBean openEntityManagerInViewFilterFilterRegistrationBean() { + return new FilterRegistrationBean<>(); + } + + } + + @Configuration(proxyBeanMethods = false) + @TestAutoConfigurationPackage(City.class) + static class TestInterceptorManualConfiguration { + + @Bean + OpenEntityManagerInViewInterceptor openEntityManagerInViewInterceptor() { + return new ManualOpenEntityManagerInViewInterceptor(); + } + + static class ManualOpenEntityManagerInViewInterceptor extends OpenEntityManagerInViewInterceptor { + + } + + } + + @Configuration(proxyBeanMethods = false) + static class TestConfigurationWithEntityManagerFactoryBuilder extends TestConfiguration { + + @Bean + LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder, + DataSource dataSource) { + return builder.dataSource(dataSource).properties(Map.of("configured", "manually")).build(); + } + + } + + @Configuration(proxyBeanMethods = false) + static class TestConfigurationWithLocalContainerEntityManagerFactoryBean extends TestConfiguration { + + @Bean + LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter adapter) { + LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); + factoryBean.setJpaVendorAdapter(adapter); + factoryBean.setDataSource(dataSource); + factoryBean.setPersistenceUnitName("manually-configured"); + Map properties = new HashMap<>(); + properties.put("configured", "manually"); + properties.put("hibernate.transaction.jta.platform", NoJtaPlatform.INSTANCE); + factoryBean.setJpaPropertyMap(properties); + return factoryBean; + } + + } + + @Configuration(proxyBeanMethods = false) + static class TestConfigurationWithEntityManagerFactory extends TestConfiguration { + + @Bean + EntityManagerFactory entityManagerFactory(DataSource dataSource, JpaVendorAdapter adapter) { + LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); + factoryBean.setJpaVendorAdapter(adapter); + factoryBean.setDataSource(dataSource); + factoryBean.setPersistenceUnitName("manually-configured"); + Map properties = new HashMap<>(); + properties.put("configured", "manually"); + properties.put("hibernate.transaction.jta.platform", NoJtaPlatform.INSTANCE); + factoryBean.setJpaPropertyMap(properties); + factoryBean.afterPropertiesSet(); + return factoryBean.getObject(); + } + + @Bean + PlatformTransactionManager transactionManager(EntityManagerFactory emf) { + JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(emf); + return transactionManager; + } + + } + + @Configuration(proxyBeanMethods = false) + @TestAutoConfigurationPackage(City.class) + static class TestConfigurationWithTransactionManager { + + @Bean + JpaTransactionManager testTransactionManager() { + return new CustomJpaTransactionManager(); + } + + } + + @Configuration(proxyBeanMethods = false) + @TestAutoConfigurationPackage(Country.class) + static class AutoConfigurePackageForCountry { + + } + + @Configuration(proxyBeanMethods = false) + @TestAutoConfigurationPackage(HibernateJpaAutoConfigurationTests.class) + static class TestConfigurationWithCustomPersistenceUnitManager { + + private final DataSource dataSource; + + TestConfigurationWithCustomPersistenceUnitManager(DataSource dataSource) { + this.dataSource = dataSource; + } + + @Bean + PersistenceUnitManager persistenceUnitManager() { + DefaultPersistenceUnitManager persistenceUnitManager = new DefaultPersistenceUnitManager(); + persistenceUnitManager.setDefaultDataSource(this.dataSource); + persistenceUnitManager.setPackagesToScan(City.class.getPackage().getName()); + return persistenceUnitManager; + } + + } + + @Configuration(proxyBeanMethods = false) + @TestAutoConfigurationPackage(HibernateJpaAutoConfigurationTests.class) + static class TestConfigurationWithCustomPersistenceUnitPostProcessors { + + @Bean + EntityManagerFactoryBuilderCustomizer entityManagerFactoryBuilderCustomizer() { + return (builder) -> builder.setPersistenceUnitPostProcessors( + (pui) -> pui.addManagedClassName("customized.attribute.converter.class.name")); + } + + } + + static class CustomJpaTransactionManager extends JpaTransactionManager { + + } + + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + @WithResource(name = "META-INF/persistence.xml", + content = """ + + + + org.springframework.boot.jpa.autoconfigure.test.city.City + true + + + """) + protected @interface WithMetaInfPersistenceXmlResource { + + } + @Configuration(proxyBeanMethods = false) @TestAutoConfigurationPackage(City.class) @DependsOnDatabaseInitialization diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/HibernateMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateMetricsAutoConfigurationTests.java similarity index 98% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/HibernateMetricsAutoConfigurationTests.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateMetricsAutoConfigurationTests.java index 4c3320eeb9..761ac4d98f 100644 --- a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/HibernateMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateMetricsAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.hibernate.metrics.autoconfigure; +package org.springframework.boot.hibernate.autoconfigure; import java.util.Map; import java.util.function.Function; @@ -37,7 +37,6 @@ import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration; import org.springframework.boot.jpa.EntityManagerFactoryBuilder; import org.springframework.boot.jpa.autoconfigure.EntityManagerFactoryBuilderCustomizer; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernatePropertiesTests.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernatePropertiesTests.java similarity index 97% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernatePropertiesTests.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernatePropertiesTests.java index 25f6556f09..562f9f1c2f 100644 --- a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/HibernatePropertiesTests.java +++ b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernatePropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.jpa.autoconfigure.hibernate; +package org.springframework.boot.hibernate.autoconfigure; import java.util.Map; import java.util.function.Consumer; @@ -30,8 +30,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.hibernate.SpringImplicitNamingStrategy; import org.springframework.boot.jpa.autoconfigure.JpaProperties; -import org.springframework.boot.jpa.hibernate.SpringImplicitNamingStrategy; import org.springframework.boot.test.context.assertj.AssertableApplicationContext; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ContextConsumer; diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/mapping/NonAnnotatedEntity.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/mapping/NonAnnotatedEntity.java similarity index 100% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/mapping/NonAnnotatedEntity.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/jpa/autoconfigure/hibernate/mapping/NonAnnotatedEntity.java diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/test/city/City.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/jpa/autoconfigure/test/city/City.java similarity index 100% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/test/city/City.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/jpa/autoconfigure/test/city/City.java diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/test/city/CityListener.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/jpa/autoconfigure/test/city/CityListener.java similarity index 100% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/test/city/CityListener.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/jpa/autoconfigure/test/city/CityListener.java diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/test/country/Country.java b/spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/jpa/autoconfigure/test/country/Country.java similarity index 100% rename from spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/test/country/Country.java rename to spring-boot-project/spring-boot-hibernate/src/test/java/org/springframework/boot/jpa/autoconfigure/test/country/Country.java diff --git a/spring-boot-project/spring-boot-jpa/build.gradle b/spring-boot-project/spring-boot-jpa/build.gradle index aab15d4bcf..b80016614b 100644 --- a/spring-boot-project/spring-boot-jpa/build.gradle +++ b/spring-boot-project/spring-boot-jpa/build.gradle @@ -1,6 +1,5 @@ plugins { id "java-library" - id "org.springframework.boot.auto-configuration" id "org.springframework.boot.configuration-properties" id "org.springframework.boot.deployed" id "org.springframework.boot.optional-dependencies" @@ -12,31 +11,14 @@ dependencies { api(project(":spring-boot-project:spring-boot-jdbc")) api(project(":spring-boot-project:spring-boot-tx")) api("jakarta.persistence:jakarta.persistence-api") - api("org.hibernate.orm:hibernate-core") api("org.springframework:spring-orm") optional(project(":spring-boot-project:spring-boot-autoconfigure")) - optional(project(":spring-boot-project:spring-boot-metrics")) optional("jakarta.servlet:jakarta.servlet-api") - optional("org.hibernate.orm:hibernate-micrometer") optional("org.springframework:spring-webmvc") - testImplementation(project(":spring-boot-project:spring-boot-flyway")) - testImplementation(project(":spring-boot-project:spring-boot-liquibase")) testImplementation(project(":spring-boot-project:spring-boot-test")) testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) testImplementation(testFixtures(project(":spring-boot-project:spring-boot-autoconfigure"))) - testImplementation("com.zaxxer:HikariCP") - testImplementation("javax.cache:cache-api") - testImplementation("org.ehcache:ehcache") { - artifact { - classifier = 'jakarta' - } - } - testImplementation("org.hibernate.orm:hibernate-envers") - testImplementation("org.hibernate.orm:hibernate-jcache") testImplementation("org.springframework:spring-context-support") - - testRuntimeOnly("ch.qos.logback:logback-classic") - testRuntimeOnly("com.h2database:h2") } diff --git a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/package-info.java b/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/package-info.java deleted file mode 100644 index 837191fdc9..0000000000 --- a/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/metrics/autoconfigure/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-2025 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Auto-configuration for Hibernate metrics. - */ -package org.springframework.boot.jpa.hibernate.metrics.autoconfigure; diff --git a/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 4f07557547..1b02295bb7 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,79 +1,11 @@ { "groups": [], "properties": [ - { - "name": "spring.jpa.hibernate.use-new-id-generator-mappings", - "type": "java.lang.Boolean", - "description": "Whether to use Hibernate's newer IdentifierGenerator for AUTO, TABLE and SEQUENCE. This is actually a shortcut for the \"hibernate.id.new_generator_mappings\" property. When not specified will default to \"true\".", - "deprecation": { - "level": "error", - "reason": "Hibernate no longer supports disabling the use of new ID generator mappings." - } - }, { "name": "spring.jpa.open-in-view", "defaultValue": true } ], "hints": [ - { - "name": "spring.jpa.hibernate.ddl-auto", - "values": [ - { - "value": "create", - "description": "Create the schema and destroy previous data." - }, - { - "value": "create-drop", - "description": "Create and then destroy the schema at the end of the session." - }, - { - "value": "create-only", - "description": "Create the schema." - }, - { - "value": "drop", - "description": "Drop the schema." - }, - { - "value": "none", - "description": "Disable DDL handling." - }, - { - "value": "truncate", - "description": "Truncate the tables in the schema." - }, - { - "value": "update", - "description": "Update the schema if necessary." - }, - { - "value": "validate", - "description": "Validate the schema, make no changes to the database." - } - ] - }, - { - "name": "spring.jpa.hibernate.naming.implicit-strategy", - "providers": [ - { - "name": "class-reference", - "parameters": { - "target": "org.hibernate.boot.model.naming.ImplicitNamingStrategy" - } - } - ] - }, - { - "name": "spring.jpa.hibernate.naming.physical-strategy", - "providers": [ - { - "name": "class-reference", - "parameters": { - "target": "org.hibernate.boot.model.naming.PhysicalNamingStrategy" - } - } - ] - } ] } diff --git a/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index df42f543e7..0000000000 --- a/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration -org.springframework.boot.jpa.hibernate.metrics.autoconfigure.HibernateMetricsAutoConfiguration diff --git a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/AbstractJpaAutoConfigurationTests.java b/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/AbstractJpaAutoConfigurationTests.java deleted file mode 100644 index 95dacc2f51..0000000000 --- a/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/autoconfigure/AbstractJpaAutoConfigurationTests.java +++ /dev/null @@ -1,528 +0,0 @@ -/* - * Copyright 2012-2025 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.jpa.autoconfigure; - -import java.io.File; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -import javax.sql.DataSource; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.metamodel.ManagedType; -import jakarta.persistence.spi.PersistenceUnitInfo; -import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage; -import org.springframework.boot.jdbc.DataSourceBuilder; -import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; -import org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration; -import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; -import org.springframework.boot.jpa.EntityManagerFactoryBuilder; -import org.springframework.boot.jpa.autoconfigure.test.city.City; -import org.springframework.boot.jpa.autoconfigure.test.country.Country; -import org.springframework.boot.test.context.assertj.AssertableApplicationContext; -import org.springframework.boot.test.context.runner.ApplicationContextRunner; -import org.springframework.boot.test.context.runner.ContextConsumer; -import org.springframework.boot.test.context.runner.WebApplicationContextRunner; -import org.springframework.boot.testsupport.BuildOutput; -import org.springframework.boot.testsupport.classpath.resources.WithResource; -import org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration; -import org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.JpaVendorAdapter; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager; -import org.springframework.orm.jpa.persistenceunit.ManagedClassNameFilter; -import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes; -import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager; -import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter; -import org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionManager; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Base for JPA tests and tests for {@link JpaBaseConfiguration}. - * - * @author Phillip Webb - * @author Dave Syer - * @author Stephane Nicoll - * @author Yanming Zhou - */ -public abstract class AbstractJpaAutoConfigurationTests { - - private final Class autoConfiguredClass; - - private final ApplicationContextRunner contextRunner; - - protected AbstractJpaAutoConfigurationTests(Class autoConfiguredClass) { - this.autoConfiguredClass = autoConfiguredClass; - this.contextRunner = new ApplicationContextRunner() - .withPropertyValues("spring.datasource.generate-unique-name=true", - "spring.jta.log-dir=" + new File(new BuildOutput(getClass()).getRootLocation(), "transaction-logs")) - .withUserConfiguration(TestConfiguration.class) - .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, - TransactionAutoConfiguration.class, TransactionManagerCustomizationAutoConfiguration.class, - DataSourceInitializationAutoConfiguration.class, autoConfiguredClass)); - } - - protected ApplicationContextRunner contextRunner() { - return this.contextRunner; - } - - @Test - void notConfiguredIfDataSourceIsNotAvailable() { - new ApplicationContextRunner().withConfiguration(AutoConfigurations.of(this.autoConfiguredClass)) - .run(assertJpaIsNotAutoConfigured()); - } - - @Test - void notConfiguredIfNoSingleDataSourceCandidateIsAvailable() { - new ApplicationContextRunner().withUserConfiguration(TestTwoDataSourcesConfiguration.class) - .withConfiguration(AutoConfigurations.of(this.autoConfiguredClass)) - .run(assertJpaIsNotAutoConfigured()); - } - - protected ContextConsumer assertJpaIsNotAutoConfigured() { - return (context) -> { - assertThat(context).hasNotFailed(); - assertThat(context).hasSingleBean(JpaProperties.class); - assertThat(context).doesNotHaveBean(TransactionManager.class); - assertThat(context).doesNotHaveBean(EntityManagerFactory.class); - }; - } - - @Test - void configuredWithAutoConfiguredDataSource() { - this.contextRunner.run((context) -> { - assertThat(context).hasSingleBean(DataSource.class); - assertThat(context).hasSingleBean(JpaTransactionManager.class); - assertThat(context).hasSingleBean(EntityManagerFactory.class); - assertThat(context).hasSingleBean(PersistenceManagedTypes.class); - }); - } - - @Test - void configuredWithSingleCandidateDataSource() { - this.contextRunner.withUserConfiguration(TestTwoDataSourcesAndPrimaryConfiguration.class).run((context) -> { - assertThat(context).getBeans(DataSource.class).hasSize(2); - assertThat(context).hasSingleBean(JpaTransactionManager.class); - assertThat(context).hasSingleBean(EntityManagerFactory.class); - assertThat(context).hasSingleBean(PersistenceManagedTypes.class); - }); - } - - @Test - void jpaTransactionManagerTakesPrecedenceOverSimpleDataSourceOne() { - this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceTransactionManagerAutoConfiguration.class)) - .run((context) -> { - assertThat(context).hasSingleBean(DataSource.class); - assertThat(context).hasSingleBean(JpaTransactionManager.class); - assertThat(context).getBean("transactionManager").isInstanceOf(JpaTransactionManager.class); - }); - } - - @Test - void openEntityManagerInViewInterceptorIsCreated() { - new WebApplicationContextRunner().withPropertyValues("spring.datasource.generate-unique-name=true") - .withUserConfiguration(TestConfiguration.class) - .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, - TransactionAutoConfiguration.class, this.autoConfiguredClass)) - .run((context) -> assertThat(context).hasSingleBean(OpenEntityManagerInViewInterceptor.class)); - } - - @Test - void openEntityManagerInViewInterceptorIsNotRegisteredWhenFilterPresent() { - new WebApplicationContextRunner().withPropertyValues("spring.datasource.generate-unique-name=true") - .withUserConfiguration(TestFilterConfiguration.class) - .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, - TransactionAutoConfiguration.class, this.autoConfiguredClass)) - .run((context) -> assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class)); - } - - @Test - void openEntityManagerInViewInterceptorIsNotRegisteredWhenFilterRegistrationPresent() { - new WebApplicationContextRunner().withPropertyValues("spring.datasource.generate-unique-name=true") - .withUserConfiguration(TestFilterRegistrationConfiguration.class) - .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, - TransactionAutoConfiguration.class, this.autoConfiguredClass)) - .run((context) -> assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class)); - } - - @Test - void openEntityManagerInViewInterceptorAutoConfigurationBacksOffWhenManuallyRegistered() { - new WebApplicationContextRunner().withPropertyValues("spring.datasource.generate-unique-name=true") - .withUserConfiguration(TestInterceptorManualConfiguration.class) - .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, - TransactionAutoConfiguration.class, this.autoConfiguredClass)) - .run((context) -> assertThat(context).getBean(OpenEntityManagerInViewInterceptor.class) - .isExactlyInstanceOf( - TestInterceptorManualConfiguration.ManualOpenEntityManagerInViewInterceptor.class)); - } - - @Test - void openEntityManagerInViewInterceptorIsNotRegisteredWhenExplicitlyOff() { - new WebApplicationContextRunner() - .withPropertyValues("spring.datasource.generate-unique-name=true", "spring.jpa.open-in-view=false") - .withUserConfiguration(TestConfiguration.class) - .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, - TransactionAutoConfiguration.class, this.autoConfiguredClass)) - .run((context) -> assertThat(context).doesNotHaveBean(OpenEntityManagerInViewInterceptor.class)); - } - - @Test - void customJpaProperties() { - this.contextRunner - .withPropertyValues("spring.jpa.properties.a:b", "spring.jpa.properties.a.b:c", "spring.jpa.properties.c:d") - .run((context) -> { - LocalContainerEntityManagerFactoryBean bean = context - .getBean(LocalContainerEntityManagerFactoryBean.class); - Map map = bean.getJpaPropertyMap(); - assertThat(map).containsEntry("a", "b"); - assertThat(map).containsEntry("c", "d"); - assertThat(map).containsEntry("a.b", "c"); - }); - } - - @Test - @WithMetaInfPersistenceXmlResource - void usesManuallyDefinedLocalContainerEntityManagerFactoryBeanUsingBuilder() { - this.contextRunner.withPropertyValues("spring.jpa.properties.a=b") - .withUserConfiguration(TestConfigurationWithEntityManagerFactoryBuilder.class) - .run((context) -> { - LocalContainerEntityManagerFactoryBean factoryBean = context - .getBean(LocalContainerEntityManagerFactoryBean.class); - Map map = factoryBean.getJpaPropertyMap(); - assertThat(map).containsEntry("configured", "manually").containsEntry("a", "b"); - }); - } - - @Test - @WithMetaInfPersistenceXmlResource - void usesManuallyDefinedLocalContainerEntityManagerFactoryBeanIfAvailable() { - this.contextRunner.withUserConfiguration(TestConfigurationWithLocalContainerEntityManagerFactoryBean.class) - .run((context) -> { - LocalContainerEntityManagerFactoryBean factoryBean = context - .getBean(LocalContainerEntityManagerFactoryBean.class); - Map map = factoryBean.getJpaPropertyMap(); - assertThat(map).containsEntry("configured", "manually"); - }); - } - - @Test - @WithMetaInfPersistenceXmlResource - void usesManuallyDefinedEntityManagerFactoryIfAvailable() { - this.contextRunner.withUserConfiguration(TestConfigurationWithLocalContainerEntityManagerFactoryBean.class) - .run((context) -> { - EntityManagerFactory factoryBean = context.getBean(EntityManagerFactory.class); - Map map = factoryBean.getProperties(); - assertThat(map).containsEntry("configured", "manually"); - }); - } - - @Test - void usesManuallyDefinedTransactionManagerBeanIfAvailable() { - this.contextRunner.withUserConfiguration(TestConfigurationWithTransactionManager.class).run((context) -> { - assertThat(context).hasSingleBean(TransactionManager.class); - TransactionManager txManager = context.getBean(TransactionManager.class); - assertThat(txManager).isInstanceOf(CustomJpaTransactionManager.class); - }); - } - - @Test - void defaultPersistenceManagedTypes() { - this.contextRunner.run((context) -> { - assertThat(context).hasSingleBean(PersistenceManagedTypes.class); - EntityManager entityManager = context.getBean(EntityManagerFactory.class).createEntityManager(); - assertThat(getManagedJavaTypes(entityManager)).contains(City.class).doesNotContain(Country.class); - }); - } - - @Test - void customPersistenceManagedTypes() { - this.contextRunner - .withBean(PersistenceManagedTypes.class, () -> PersistenceManagedTypes.of(Country.class.getName())) - .run((context) -> { - assertThat(context).hasSingleBean(PersistenceManagedTypes.class); - EntityManager entityManager = context.getBean(EntityManagerFactory.class).createEntityManager(); - assertThat(getManagedJavaTypes(entityManager)).contains(Country.class).doesNotContain(City.class); - }); - } - - @Test - void customPersistenceUnitManager() { - this.contextRunner.withUserConfiguration(TestConfigurationWithCustomPersistenceUnitManager.class) - .run((context) -> { - LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = context - .getBean(LocalContainerEntityManagerFactoryBean.class); - assertThat(entityManagerFactoryBean).hasFieldOrPropertyWithValue("persistenceUnitManager", - context.getBean(PersistenceUnitManager.class)); - }); - } - - @Test - void customPersistenceUnitPostProcessors() { - this.contextRunner.withUserConfiguration(TestConfigurationWithCustomPersistenceUnitPostProcessors.class) - .run((context) -> { - LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = context - .getBean(LocalContainerEntityManagerFactoryBean.class); - PersistenceUnitInfo persistenceUnitInfo = entityManagerFactoryBean.getPersistenceUnitInfo(); - assertThat(persistenceUnitInfo).isNotNull(); - assertThat(persistenceUnitInfo.getManagedClassNames()) - .contains("customized.attribute.converter.class.name"); - }); - } - - @Test - void customManagedClassNameFilter() { - this.contextRunner.withBean(ManagedClassNameFilter.class, () -> (s) -> !s.endsWith("City")) - .withUserConfiguration(AutoConfigurePackageForCountry.class) - .run((context) -> { - EntityManager entityManager = context.getBean(EntityManagerFactory.class).createEntityManager(); - assertThat(getManagedJavaTypes(entityManager)).contains(Country.class).doesNotContain(City.class); - }); - } - - private Class[] getManagedJavaTypes(EntityManager entityManager) { - Set> managedTypes = entityManager.getMetamodel().getManagedTypes(); - return managedTypes.stream().map(ManagedType::getJavaType).toArray(Class[]::new); - } - - @Configuration(proxyBeanMethods = false) - protected static class TestTwoDataSourcesConfiguration { - - @Bean - DataSource firstDataSource() { - return createRandomDataSource(); - } - - @Bean - DataSource secondDataSource() { - return createRandomDataSource(); - } - - private DataSource createRandomDataSource() { - String url = "jdbc:h2:mem:init-" + UUID.randomUUID(); - return DataSourceBuilder.create().url(url).build(); - } - - } - - @Configuration(proxyBeanMethods = false) - static class TestTwoDataSourcesAndPrimaryConfiguration { - - @Bean - @Primary - DataSource firstDataSource() { - return createRandomDataSource(); - } - - @Bean - DataSource secondDataSource() { - return createRandomDataSource(); - } - - private DataSource createRandomDataSource() { - String url = "jdbc:h2:mem:init-" + UUID.randomUUID(); - return DataSourceBuilder.create().url(url).build(); - } - - } - - @Configuration(proxyBeanMethods = false) - @TestAutoConfigurationPackage(City.class) - protected static class TestConfiguration { - - } - - @Configuration(proxyBeanMethods = false) - @TestAutoConfigurationPackage(City.class) - static class TestFilterConfiguration { - - @Bean - OpenEntityManagerInViewFilter openEntityManagerInViewFilter() { - return new OpenEntityManagerInViewFilter(); - } - - } - - @Configuration(proxyBeanMethods = false) - @TestAutoConfigurationPackage(City.class) - static class TestFilterRegistrationConfiguration { - - @Bean - FilterRegistrationBean openEntityManagerInViewFilterFilterRegistrationBean() { - return new FilterRegistrationBean<>(); - } - - } - - @Configuration(proxyBeanMethods = false) - @TestAutoConfigurationPackage(City.class) - static class TestInterceptorManualConfiguration { - - @Bean - OpenEntityManagerInViewInterceptor openEntityManagerInViewInterceptor() { - return new ManualOpenEntityManagerInViewInterceptor(); - } - - static class ManualOpenEntityManagerInViewInterceptor extends OpenEntityManagerInViewInterceptor { - - } - - } - - @Configuration(proxyBeanMethods = false) - static class TestConfigurationWithEntityManagerFactoryBuilder extends TestConfiguration { - - @Bean - LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder, - DataSource dataSource) { - return builder.dataSource(dataSource).properties(Map.of("configured", "manually")).build(); - } - - } - - @Configuration(proxyBeanMethods = false) - static class TestConfigurationWithLocalContainerEntityManagerFactoryBean extends TestConfiguration { - - @Bean - LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter adapter) { - LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); - factoryBean.setJpaVendorAdapter(adapter); - factoryBean.setDataSource(dataSource); - factoryBean.setPersistenceUnitName("manually-configured"); - Map properties = new HashMap<>(); - properties.put("configured", "manually"); - properties.put("hibernate.transaction.jta.platform", NoJtaPlatform.INSTANCE); - factoryBean.setJpaPropertyMap(properties); - return factoryBean; - } - - } - - @Configuration(proxyBeanMethods = false) - static class TestConfigurationWithEntityManagerFactory extends TestConfiguration { - - @Bean - EntityManagerFactory entityManagerFactory(DataSource dataSource, JpaVendorAdapter adapter) { - LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); - factoryBean.setJpaVendorAdapter(adapter); - factoryBean.setDataSource(dataSource); - factoryBean.setPersistenceUnitName("manually-configured"); - Map properties = new HashMap<>(); - properties.put("configured", "manually"); - properties.put("hibernate.transaction.jta.platform", NoJtaPlatform.INSTANCE); - factoryBean.setJpaPropertyMap(properties); - factoryBean.afterPropertiesSet(); - return factoryBean.getObject(); - } - - @Bean - PlatformTransactionManager transactionManager(EntityManagerFactory emf) { - JpaTransactionManager transactionManager = new JpaTransactionManager(); - transactionManager.setEntityManagerFactory(emf); - return transactionManager; - } - - } - - @Configuration(proxyBeanMethods = false) - @TestAutoConfigurationPackage(City.class) - static class TestConfigurationWithTransactionManager { - - @Bean - TransactionManager testTransactionManager() { - return new CustomJpaTransactionManager(); - } - - } - - @Configuration(proxyBeanMethods = false) - @TestAutoConfigurationPackage(Country.class) - static class AutoConfigurePackageForCountry { - - } - - @Configuration(proxyBeanMethods = false) - @TestAutoConfigurationPackage(AbstractJpaAutoConfigurationTests.class) - static class TestConfigurationWithCustomPersistenceUnitManager { - - private final DataSource dataSource; - - TestConfigurationWithCustomPersistenceUnitManager(DataSource dataSource) { - this.dataSource = dataSource; - } - - @Bean - PersistenceUnitManager persistenceUnitManager() { - DefaultPersistenceUnitManager persistenceUnitManager = new DefaultPersistenceUnitManager(); - persistenceUnitManager.setDefaultDataSource(this.dataSource); - persistenceUnitManager.setPackagesToScan(City.class.getPackage().getName()); - return persistenceUnitManager; - } - - } - - @Configuration(proxyBeanMethods = false) - @TestAutoConfigurationPackage(AbstractJpaAutoConfigurationTests.class) - static class TestConfigurationWithCustomPersistenceUnitPostProcessors { - - @Bean - EntityManagerFactoryBuilderCustomizer entityManagerFactoryBuilderCustomizer() { - return (builder) -> builder.setPersistenceUnitPostProcessors( - (pui) -> pui.addManagedClassName("customized.attribute.converter.class.name")); - } - - } - - static class CustomJpaTransactionManager extends JpaTransactionManager { - - } - - @Target(ElementType.METHOD) - @Retention(RetentionPolicy.RUNTIME) - @WithResource(name = "META-INF/persistence.xml", - content = """ - - - - org.springframework.boot.jpa.autoconfigure.test.city.City - true - - - """) - protected @interface WithMetaInfPersistenceXmlResource { - - } - -} diff --git a/spring-boot-project/spring-boot-quartz/build.gradle b/spring-boot-project/spring-boot-quartz/build.gradle index 2555662ba5..15ab5b53ca 100644 --- a/spring-boot-project/spring-boot-quartz/build.gradle +++ b/spring-boot-project/spring-boot-quartz/build.gradle @@ -18,7 +18,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-actuator-autoconfigure")) optional(project(":spring-boot-project:spring-boot-autoconfigure")) optional(project(":spring-boot-project:spring-boot-jdbc")) - optional(project(":spring-boot-project:spring-boot-jpa")) + optional(project(":spring-boot-project:spring-boot-hibernate")) testImplementation(project(":spring-boot-project:spring-boot-flyway")) testImplementation(project(":spring-boot-project:spring-boot-liquibase")) diff --git a/spring-boot-project/spring-boot-quartz/src/main/java/org/springframework/boot/quartz/autoconfigure/QuartzAutoConfiguration.java b/spring-boot-project/spring-boot-quartz/src/main/java/org/springframework/boot/quartz/autoconfigure/QuartzAutoConfiguration.java index 844afab520..5ccb60a3ac 100644 --- a/spring-boot-project/spring-boot-quartz/src/main/java/org/springframework/boot/quartz/autoconfigure/QuartzAutoConfiguration.java +++ b/spring-boot-project/spring-boot-quartz/src/main/java/org/springframework/boot/quartz/autoconfigure/QuartzAutoConfiguration.java @@ -54,7 +54,7 @@ import org.springframework.transaction.PlatformTransactionManager; * @since 4.0.0 */ @AutoConfiguration(afterName = { "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration", - "org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration" }) + "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration" }) @ConditionalOnClass({ Scheduler.class, SchedulerFactoryBean.class, PlatformTransactionManager.class }) @EnableConfigurationProperties(QuartzProperties.class) public class QuartzAutoConfiguration { diff --git a/spring-boot-project/spring-boot-security/build.gradle b/spring-boot-project/spring-boot-security/build.gradle index 191562827e..cf40be90c2 100644 --- a/spring-boot-project/spring-boot-security/build.gradle +++ b/spring-boot-project/spring-boot-security/build.gradle @@ -37,9 +37,9 @@ dependencies { optional("org.springframework.security:spring-security-messaging") optional("org.springframework.security:spring-security-rsocket") + testImplementation(project(":spring-boot-project:spring-boot-hibernate")) testImplementation(project(":spring-boot-project:spring-boot-http-converter")) testImplementation(project(":spring-boot-project:spring-boot-jackson")) - testImplementation(project(":spring-boot-project:spring-boot-jpa")) testImplementation(project(":spring-boot-project:spring-boot-restclient")) testImplementation(project(":spring-boot-project:spring-boot-rsocket")) testImplementation(project(":spring-boot-project:spring-boot-test")) diff --git a/spring-boot-project/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/jpa/JpaUserDetailsTests.java b/spring-boot-project/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/jpa/JpaUserDetailsTests.java index 3836539636..39d8bc38ef 100644 --- a/spring-boot-project/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/jpa/JpaUserDetailsTests.java +++ b/spring-boot-project/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/jpa/JpaUserDetailsTests.java @@ -19,9 +19,9 @@ package org.springframework.boot.security.autoconfigure.jpa; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.EmbeddedDataSourceConfiguration; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.boot.security.autoconfigure.servlet.SecurityAutoConfiguration; import org.springframework.boot.test.context.SpringBootContextLoader; import org.springframework.context.annotation.Import; diff --git a/spring-boot-project/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/servlet/SecurityAutoConfigurationTests.java b/spring-boot-project/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/servlet/SecurityAutoConfigurationTests.java index 9f48ac57be..368b9eabc5 100644 --- a/spring-boot-project/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/servlet/SecurityAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/servlet/SecurityAutoConfigurationTests.java @@ -34,8 +34,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationPropertiesBinding; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.convert.ApplicationConversionService; +import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; -import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.boot.security.autoconfigure.jpa.City; import org.springframework.boot.servlet.filter.OrderedFilter; import org.springframework.boot.test.context.FilteredClassLoader; diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/TestEntityManagerAutoConfiguration.java b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/TestEntityManagerAutoConfiguration.java index 4041ac6dd9..608d586459 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/TestEntityManagerAutoConfiguration.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/TestEntityManagerAutoConfiguration.java @@ -30,7 +30,7 @@ import org.springframework.context.annotation.Bean; * @since 1.4.0 * @see AutoConfigureTestEntityManager */ -@AutoConfiguration(afterName = "org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration") +@AutoConfiguration(afterName = "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration") @ConditionalOnClass({ EntityManagerFactory.class }) public class TestEntityManagerAutoConfiguration { diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureDataJpa.imports b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureDataJpa.imports index b9b9548651..833fac5056 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureDataJpa.imports +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureDataJpa.imports @@ -1,6 +1,6 @@ # AutoConfigureDataJpa auto-configuration imports org.springframework.boot.data.jpa.autoconfigure.JpaRepositoriesAutoConfiguration -org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration +org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/build.gradle similarity index 82% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/build.gradle rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/build.gradle index e14b5aa0fe..413aa23c42 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/build.gradle +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/build.gradle @@ -2,13 +2,13 @@ plugins { id "java" } -description = "Spring Boot JPA smoke test" +description = "Spring Boot Hibernate smoke test" dependencies { implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-freemarker")) implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web")) implementation(project(":spring-boot-project:spring-boot-jdbc")) - implementation(project(":spring-boot-project:spring-boot-jpa")) + implementation(project(":spring-boot-project:spring-boot-hibernate")) implementation("jakarta.xml.bind:jakarta.xml.bind-api") runtimeOnly("com.h2database:h2") diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/SampleJpaApplication.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/SampleJpaApplication.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/SampleJpaApplication.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/SampleJpaApplication.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/domain/Note.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/domain/Note.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/domain/Note.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/domain/Note.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/domain/Tag.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/domain/Tag.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/domain/Tag.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/domain/Tag.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/repository/JpaNoteRepository.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/repository/JpaNoteRepository.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/repository/JpaNoteRepository.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/repository/JpaNoteRepository.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/repository/JpaTagRepository.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/repository/JpaTagRepository.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/repository/JpaTagRepository.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/repository/JpaTagRepository.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/repository/NoteRepository.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/repository/NoteRepository.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/repository/NoteRepository.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/repository/NoteRepository.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/repository/TagRepository.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/repository/TagRepository.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/repository/TagRepository.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/repository/TagRepository.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/web/IndexController.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/web/IndexController.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/java/smoketest/jpa/web/IndexController.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/java/smoketest/jpa/web/IndexController.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/resources/application.properties b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/resources/application.properties similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/resources/application.properties rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/resources/application.properties diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/resources/import.sql b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/resources/import.sql similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/resources/import.sql rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/resources/import.sql diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/resources/templates/index.ftlh b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/resources/templates/index.ftlh similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/main/resources/templates/index.ftlh rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/main/resources/templates/index.ftlh diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/test/java/smoketest/jpa/SampleJpaApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/test/java/smoketest/jpa/SampleJpaApplicationTests.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/test/java/smoketest/jpa/SampleJpaApplicationTests.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/test/java/smoketest/jpa/SampleJpaApplicationTests.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/test/java/smoketest/jpa/repository/JpaNoteRepositoryIntegrationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/test/java/smoketest/jpa/repository/JpaNoteRepositoryIntegrationTests.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/test/java/smoketest/jpa/repository/JpaNoteRepositoryIntegrationTests.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/test/java/smoketest/jpa/repository/JpaNoteRepositoryIntegrationTests.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/test/java/smoketest/jpa/repository/JpaTagRepositoryIntegrationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/test/java/smoketest/jpa/repository/JpaTagRepositoryIntegrationTests.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-jpa/src/test/java/smoketest/jpa/repository/JpaTagRepositoryIntegrationTests.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-hibernate/src/test/java/smoketest/jpa/repository/JpaTagRepositoryIntegrationTests.java diff --git a/src/checkstyle/checkstyle-suppressions.xml b/src/checkstyle/checkstyle-suppressions.xml index 1cdb218d5a..b1d1496802 100644 --- a/src/checkstyle/checkstyle-suppressions.xml +++ b/src/checkstyle/checkstyle-suppressions.xml @@ -86,4 +86,5 @@ +