Skip to content

Commit 5cc0d9e

Browse files
committed
feat: make possible to add PersistenceUnitPostProcessor on EntityManagerFactoryBuilder
Signed-off-by: Lansana DIOMANDE <lansana.diomande@epfedu.fr>
1 parent 8985af2 commit 5cc0d9e

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

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

Lines changed: 32 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,24 @@ EntityManagerFactoryBuilderCustomizer entityManagerFactoryBuilderCustomizer() {
11491163

11501164
}
11511165

1166+
@Configuration(proxyBeanMethods = false)
1167+
@TestAutoConfigurationPackage(HibernateJpaAutoConfigurationTests.class)
1168+
static class TestConfigurationWithMultipleCustomPersistenceUnitPostProcessors {
1169+
1170+
@Bean
1171+
EntityManagerFactoryBuilderCustomizer entityManagerFactoryBuilderCustomizer() {
1172+
return (builder) -> builder.addPersistenceUnitPostProcessors(
1173+
(pui) -> pui.addManagedClassName("customized.attribute.converter.class.name"));
1174+
}
1175+
1176+
@Bean
1177+
EntityManagerFactoryBuilderCustomizer otherEntityManagerFactoryBuilderCustomizer() {
1178+
return (builder) -> builder.addPersistenceUnitPostProcessors(
1179+
(pui) -> pui.addManagedClassName("customized.attribute.converter.class.othername"));
1180+
}
1181+
1182+
}
1183+
11521184
static class CustomJpaTransactionManager extends JpaTransactionManager {
11531185

11541186
}

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717
package org.springframework.boot.jpa;
1818

1919
import java.net.URL;
20+
import java.util.ArrayList;
21+
import java.util.Arrays;
2022
import java.util.HashMap;
2123
import java.util.HashSet;
2224
import java.util.LinkedHashMap;
25+
import java.util.List;
2326
import java.util.Map;
2427
import java.util.Set;
2528
import java.util.function.Function;
@@ -129,6 +132,24 @@ public void setPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... per
129132
this.persistenceUnitPostProcessors = persistenceUnitPostProcessors;
130133
}
131134

135+
/**
136+
* Add some {@linkplain PersistenceUnitPostProcessor persistence unit post processors}
137+
* to be applied to the PersistenceUnitInfo used for creating the
138+
* {@link LocalContainerEntityManagerFactoryBean}.
139+
* @param persistenceUnitPostProcessors the persistence unit post processors to use
140+
*/
141+
public void addPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... persistenceUnitPostProcessors) {
142+
if (this.persistenceUnitPostProcessors == null) {
143+
this.persistenceUnitPostProcessors = persistenceUnitPostProcessors;
144+
return;
145+
}
146+
147+
var combined = new ArrayList<>(Arrays.asList(this.persistenceUnitPostProcessors));
148+
combined.addAll(Arrays.asList(persistenceUnitPostProcessors));
149+
150+
this.persistenceUnitPostProcessors = combined.toArray(PersistenceUnitPostProcessor[]::new);
151+
}
152+
132153
/**
133154
* A fluent builder for a LocalContainerEntityManagerFactoryBean.
134155
*/

0 commit comments

Comments
 (0)