From f25c24fbefc0b85ebce37b4f22208cd52afc22d1 Mon Sep 17 00:00:00 2001 From: Yanming Zhou Date: Fri, 17 Mar 2023 11:16:43 +0800 Subject: [PATCH] Remove synthetic attribute from SharedEntityManager. AOT no longer needs this bean to be synthetic to work properly. And this attribute hampers BeanPostProcessors from being applied. See #2730 Original Pull Request: #2866 --- .../config/JpaRepositoryConfigExtension.java | 1 - .../JpaRepositoryConfigExtensionUnitTests.java | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java index dc47c51c9..0660920eb 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtension.java @@ -217,7 +217,6 @@ public class JpaRepositoryConfigExtension extends RepositoryConfigurationExtensi AbstractBeanDefinition entityManager = getEntityManagerBeanDefinitionFor(config, null); entityManager.setRole(BeanDefinition.ROLE_SUPPORT); - entityManager.setSynthetic(true); entityManager.setPrimary(false); entityManager.setAutowireCandidate(false); diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtensionUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtensionUnitTests.java index 65388887f..32c5fffae 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtensionUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/config/JpaRepositoryConfigExtensionUnitTests.java @@ -31,6 +31,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.RootBeanDefinition; @@ -48,6 +49,7 @@ import org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcesso * @author Oliver Gierke * @author Mark Paluch * @author Jens Schauder + * @author Yanming Zhou */ @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) @@ -147,6 +149,20 @@ class JpaRepositoryConfigExtensionUnitTests { .isEqualTo(JpaRepositoryConfigExtension.JpaRepositoryRegistrationAotProcessor.class); } + @Test // GH-2730 + void shouldNotRegisterEntityManagerAsSynthetic() { + + DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); + + RepositoryConfigurationExtension extension = new JpaRepositoryConfigExtension(); + extension.registerBeansForRoot(factory, configSource); + + AbstractBeanDefinition bd = (AbstractBeanDefinition) factory.getBeanDefinition("jpaSharedEM_" + + configSource.getAttribute("entityManagerFactoryRef").orElse("entityManagerFactory")); + + assertThat(bd.isSynthetic()).isEqualTo(false); + } + private void assertOnlyOnePersistenceAnnotationBeanPostProcessorRegistered(DefaultListableBeanFactory factory, String expectedBeanName) {