Add test for HibernatePersistenceConfiguration

See gh-35662
This commit is contained in:
Juergen Hoeller
2025-10-19 10:45:57 +02:00
parent 228662ad9f
commit b85993c7cb
2 changed files with 25 additions and 2 deletions
@@ -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));
@@ -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(