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
This commit is contained in:
Yanming Zhou
2023-03-17 11:16:43 +08:00
committed by Greg L. Turnquist
parent 572efd28a9
commit f25c24fbef
2 changed files with 16 additions and 1 deletions

View File

@@ -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);

View File

@@ -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) {