Skip to content

Commit b8cefd2

Browse files
Asanio06snicoll
authored andcommitted
Add support for configuring additional PersistenceUnitPostProcessor
See gh-47802 Signed-off-by: Lansana DIOMANDE <lansana.diomande@epfedu.fr>
1 parent ab28e5e commit b8cefd2

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
@@ -114,6 +114,7 @@
114114
import org.springframework.orm.jpa.persistenceunit.ManagedClassNameFilter;
115115
import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes;
116116
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager;
117+
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor;
117118
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
118119
import org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor;
119120
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
@@ -351,6 +352,19 @@ void customPersistenceUnitPostProcessors() {
351352
});
352353
}
353354

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

11691183
}
11701184

1185+
@Configuration(proxyBeanMethods = false)
1186+
@TestAutoConfigurationPackage(HibernateJpaAutoConfigurationTests.class)
1187+
static class TestConfigurationWithMultipleCustomPersistenceUnitPostProcessors {
1188+
1189+
@Bean
1190+
EntityManagerFactoryBuilderCustomizer entityManagerFactoryBuilderCustomizer() {
1191+
return (builder) -> builder.addPersistenceUnitPostProcessors(
1192+
(pui) -> pui.addManagedClassName("customized.attribute.converter.class.name"));
1193+
}
1194+
1195+
@Bean
1196+
EntityManagerFactoryBuilderCustomizer otherEntityManagerFactoryBuilderCustomizer() {
1197+
return (builder) -> builder.addPersistenceUnitPostProcessors(
1198+
(pui) -> pui.addManagedClassName("customized.attribute.converter.class.othername"));
1199+
}
1200+
1201+
}
1202+
11711203
static class CustomJpaTransactionManager extends JpaTransactionManager {
11721204

11731205
}

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)