From b85993c7cb524391b52e4910281489f64f30f546 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 19 Oct 2025 10:45:57 +0200 Subject: [PATCH] Add test for HibernatePersistenceConfiguration See gh-35662 --- .../SpringPersistenceUnitInfo.java | 2 +- ...ontainerEntityManagerFactoryBeanTests.java | 25 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java index d8b1ef37747..a2819332b68 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java @@ -209,7 +209,7 @@ public class SpringPersistenceUnitInfo extends MutablePersistenceUnitInfo { setValidationMode(config.validationMode()); getProperties().putAll(config.properties()); - // Further relevant settings from HibernatePersistenceConfiguration + // Further relevant settings from HibernatePersistenceConfiguration on Hibernate 7.1+ Method rootUrl = ClassUtils.getMethodIfAvailable(config.getClass(), "rootUrl"); if (rootUrl != null) { setPersistenceUnitRootUrl((URL) ReflectionUtils.invokeMethod(rootUrl, config)); diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java index 055c117402e..dddb4596de1 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java @@ -16,6 +16,7 @@ package org.springframework.orm.jpa; +import java.net.URL; import java.util.Map; import java.util.Properties; @@ -29,9 +30,11 @@ import jakarta.persistence.PersistenceUnitTransactionType; import jakarta.persistence.spi.PersistenceProvider; import jakarta.persistence.spi.PersistenceUnitInfo; import jakarta.persistence.spi.ProviderUtil; +import org.hibernate.jpa.HibernatePersistenceConfiguration; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.core.io.ClassPathResource; import org.springframework.core.testfixture.io.SerializationTestUtils; import org.springframework.dao.DataAccessException; import org.springframework.dao.OptimisticLockingFailureException; @@ -253,7 +256,7 @@ class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityManagerF } @Test - void acceptsPersistenceConfiguration() { + void acceptsStandardPersistenceConfiguration() { DummyContainerPersistenceProvider persistenceProvider = new DummyContainerPersistenceProvider(); LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean(); emfb.setPersistenceProvider(persistenceProvider); @@ -268,6 +271,26 @@ class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityManagerF DriversLicense.class.getName(), Person.class.getName()); } + @Test + void acceptsHibernatePersistenceConfiguration() throws Exception { + DummyContainerPersistenceProvider persistenceProvider = new DummyContainerPersistenceProvider(); + LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean(); + emfb.setPersistenceProvider(persistenceProvider); + + String entityManagerName = "call me Bob"; + URL rootUrl = new ClassPathResource("", getClass()).getURL(); + URL jarUrl = new ClassPathResource("jpa-archive.jar", getClass()).getURL(); + emfb.setPersistenceConfiguration(new HibernatePersistenceConfiguration(entityManagerName, rootUrl). + jarFileUrl(jarUrl).managedClass(DriversLicense.class).managedClass(Person.class)); + + emfb.afterPropertiesSet(); + assertThat(persistenceProvider.actualPui.getPersistenceUnitName()).isEqualTo(entityManagerName); + assertThat(persistenceProvider.actualPui.getPersistenceUnitRootUrl()).isEqualTo(rootUrl); + assertThat(persistenceProvider.actualPui.getJarFileUrls()).containsExactly(jarUrl); + assertThat(persistenceProvider.actualPui.getManagedClassNames()).containsExactly( + DriversLicense.class.getName(), Person.class.getName()); + } + private LocalContainerEntityManagerFactoryBean parseValidPersistenceUnit(PersistenceUnitPostProcessor... postProcessors) { return createEntityManagerFactoryBean(