mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-17 12:09:16 +00:00
Add support for configuring additional PersistenceUnitPostProcessor
See gh-47802 Signed-off-by: Lansana DIOMANDE <lansana.diomande@epfedu.fr>
This commit is contained in:
committed by
Stéphane Nicoll
parent
ab28e5edfa
commit
b8cefd2b9c
+32
@@ -114,6 +114,7 @@ import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
|
||||
import org.springframework.orm.jpa.persistenceunit.ManagedClassNameFilter;
|
||||
import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes;
|
||||
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager;
|
||||
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor;
|
||||
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
|
||||
import org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor;
|
||||
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
|
||||
@@ -351,6 +352,19 @@ class HibernateJpaAutoConfigurationTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldProcessAllPersistenceUnitPostProcessorsDeclaredAsBeans() {
|
||||
this.contextRunner.withUserConfiguration(TestConfigurationWithMultipleCustomPersistenceUnitPostProcessors.class)
|
||||
.run((context) -> {
|
||||
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = context
|
||||
.getBean(LocalContainerEntityManagerFactoryBean.class);
|
||||
PersistenceUnitInfo persistenceUnitInfo = entityManagerFactoryBean.getPersistenceUnitInfo();
|
||||
assertThat(persistenceUnitInfo).isNotNull();
|
||||
assertThat(persistenceUnitInfo.getManagedClassNames()).contains(
|
||||
"customized.attribute.converter.class.name", "customized.attribute.converter.class.othername");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void customManagedClassNameFilter() {
|
||||
this.contextRunner.withBean(ManagedClassNameFilter.class, () -> (s) -> !s.endsWith("City"))
|
||||
@@ -1168,6 +1182,24 @@ class HibernateJpaAutoConfigurationTests {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@TestAutoConfigurationPackage(HibernateJpaAutoConfigurationTests.class)
|
||||
static class TestConfigurationWithMultipleCustomPersistenceUnitPostProcessors {
|
||||
|
||||
@Bean
|
||||
EntityManagerFactoryBuilderCustomizer entityManagerFactoryBuilderCustomizer() {
|
||||
return (builder) -> builder.addPersistenceUnitPostProcessors(
|
||||
(pui) -> pui.addManagedClassName("customized.attribute.converter.class.name"));
|
||||
}
|
||||
|
||||
@Bean
|
||||
EntityManagerFactoryBuilderCustomizer otherEntityManagerFactoryBuilderCustomizer() {
|
||||
return (builder) -> builder.addPersistenceUnitPostProcessors(
|
||||
(pui) -> pui.addManagedClassName("customized.attribute.converter.class.othername"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class CustomJpaTransactionManager extends JpaTransactionManager {
|
||||
|
||||
}
|
||||
|
||||
+21
@@ -17,9 +17,12 @@
|
||||
package org.springframework.boot.jpa;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
@@ -129,6 +132,24 @@ public class EntityManagerFactoryBuilder {
|
||||
this.persistenceUnitPostProcessors = persistenceUnitPostProcessors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add some {@linkplain PersistenceUnitPostProcessor persistence unit post processors}
|
||||
* to be applied to the PersistenceUnitInfo used for creating the
|
||||
* {@link LocalContainerEntityManagerFactoryBean}.
|
||||
* @param persistenceUnitPostProcessors the persistence unit post processors to use
|
||||
*/
|
||||
public void addPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... persistenceUnitPostProcessors) {
|
||||
if (this.persistenceUnitPostProcessors == null) {
|
||||
this.persistenceUnitPostProcessors = persistenceUnitPostProcessors;
|
||||
return;
|
||||
}
|
||||
|
||||
var combined = new ArrayList<>(Arrays.asList(this.persistenceUnitPostProcessors));
|
||||
combined.addAll(Arrays.asList(persistenceUnitPostProcessors));
|
||||
|
||||
this.persistenceUnitPostProcessors = combined.toArray(PersistenceUnitPostProcessor[]::new);
|
||||
}
|
||||
|
||||
/**
|
||||
* A fluent builder for a LocalContainerEntityManagerFactoryBean.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user