Skip to content

Commit 22a47be

Browse files
committed
feat: make PersistenceUnitPostProcessor beans use on EntityManagerFactoryBuilder
Signed-off-by: Lansana DIOMANDE <[email protected]>
1 parent 8985af2 commit 22a47be

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

module/spring-boot-hibernate/src/test/java/org/springframework/boot/hibernate/autoconfigure/HibernateJpaAutoConfigurationTests.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
import org.springframework.orm.jpa.persistenceunit.ManagedClassNameFilter;
114114
import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes;
115115
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager;
116+
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor;
116117
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
117118
import org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor;
118119
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
@@ -350,6 +351,19 @@ void customPersistenceUnitPostProcessors() {
350351
});
351352
}
352353

354+
@Test
355+
void shouldProcessAllPersistenceUnitPostProcessorsDeclaredAsBeans() {
356+
this.contextRunner.withUserConfiguration(TestConfigurationWithMultipleCustomPersistenceUnitPostProcessors.class)
357+
.run((context) -> {
358+
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = context
359+
.getBean(LocalContainerEntityManagerFactoryBean.class);
360+
PersistenceUnitInfo persistenceUnitInfo = entityManagerFactoryBean.getPersistenceUnitInfo();
361+
assertThat(persistenceUnitInfo).isNotNull();
362+
assertThat(persistenceUnitInfo.getManagedClassNames()).contains(
363+
"customized.attribute.converter.class.name", "customized.attribute.converter.class.othername");
364+
});
365+
}
366+
353367
@Test
354368
void customManagedClassNameFilter() {
355369
this.contextRunner.withBean(ManagedClassNameFilter.class, () -> (s) -> !s.endsWith("City"))
@@ -1149,6 +1163,22 @@ EntityManagerFactoryBuilderCustomizer entityManagerFactoryBuilderCustomizer() {
11491163

11501164
}
11511165

1166+
@Configuration(proxyBeanMethods = false)
1167+
@TestAutoConfigurationPackage(HibernateJpaAutoConfigurationTests.class)
1168+
static class TestConfigurationWithMultipleCustomPersistenceUnitPostProcessors {
1169+
1170+
@Bean
1171+
PersistenceUnitPostProcessor persistenceUnitPostProcessor() {
1172+
return (pui) -> pui.addManagedClassName("customized.attribute.converter.class.name");
1173+
}
1174+
1175+
@Bean
1176+
PersistenceUnitPostProcessor otherPersistenceUnitPostProcessor() {
1177+
return (pui) -> pui.addManagedClassName("customized.attribute.converter.class.othername");
1178+
}
1179+
1180+
}
1181+
11521182
static class CustomJpaTransactionManager extends JpaTransactionManager {
11531183

11541184
}

module/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/autoconfigure/JpaBaseConfiguration.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes;
5353
import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypesScanner;
5454
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager;
55+
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor;
5556
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
5657
import org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor;
5758
import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
@@ -120,9 +121,13 @@ public JpaVendorAdapter jpaVendorAdapter() {
120121
@ConditionalOnMissingBean
121122
public EntityManagerFactoryBuilder entityManagerFactoryBuilder(JpaVendorAdapter jpaVendorAdapter,
122123
ObjectProvider<PersistenceUnitManager> persistenceUnitManager,
123-
ObjectProvider<EntityManagerFactoryBuilderCustomizer> customizers) {
124+
ObjectProvider<EntityManagerFactoryBuilderCustomizer> customizers,
125+
ObjectProvider<PersistenceUnitPostProcessor[]> persistenceUnitPostProcessors) {
124126
EntityManagerFactoryBuilder builder = new EntityManagerFactoryBuilder(jpaVendorAdapter,
125127
this::buildJpaProperties, persistenceUnitManager.getIfAvailable());
128+
129+
persistenceUnitPostProcessors.ifAvailable(builder::setPersistenceUnitPostProcessors);
130+
126131
customizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
127132
return builder;
128133
}

0 commit comments

Comments
 (0)