Use isolated Hibernate EntityManager for AOT contribution.

Closes #3876
This commit is contained in:
Mark Paluch
2025-05-08 16:45:09 +02:00
parent e1cec313f3
commit 01e4e75617
2 changed files with 17 additions and 4 deletions

View File

@@ -68,6 +68,7 @@ public class JpaRepositoryContributor extends RepositoryContributor {
private final EntityGraphLookup entityGraphLookup;
public JpaRepositoryContributor(AotRepositoryContext repositoryContext) {
super(repositoryContext);
AotMetamodel amm = new AotMetamodel(repositoryContext.getResolvedTypes());
@@ -78,6 +79,7 @@ public class JpaRepositoryContributor extends RepositoryContributor {
}
public JpaRepositoryContributor(AotRepositoryContext repositoryContext, EntityManagerFactory entityManagerFactory) {
super(repositoryContext);
this.persistenceProvider = PersistenceProvider.fromEntityManagerFactory(entityManagerFactory);

View File

@@ -325,6 +325,8 @@ public class JpaRepositoryConfigExtension extends RepositoryConfigurationExtensi
*/
public static class JpaRepositoryRegistrationAotProcessor extends RepositoryRegistrationAotProcessor {
String GENERATED_REPOSITORIES_JPA_USE_ENTITY_MANAGER = "spring.aot.jpa.repositories.use-entitymanager";
protected @Nullable RepositoryContributor contribute(AotRepositoryContext repositoryContext,
GenerationContext generationContext) {
@@ -334,11 +336,20 @@ public class JpaRepositoryConfigExtension extends RepositoryConfigurationExtensi
return null;
}
ConfigurableListableBeanFactory beanFactory = repositoryContext.getBeanFactory();
EntityManagerFactory emf = beanFactory.getBeanProvider(EntityManagerFactory.class).getIfAvailable();
boolean useEntityManager = Boolean.parseBoolean(
repositoryContext.getEnvironment().getProperty(GENERATED_REPOSITORIES_JPA_USE_ENTITY_MANAGER, "false"));
return emf != null ? new JpaRepositoryContributor(repositoryContext, emf)
: new JpaRepositoryContributor(repositoryContext);
if (useEntityManager) {
ConfigurableListableBeanFactory beanFactory = repositoryContext.getBeanFactory();
EntityManagerFactory emf = beanFactory.getBeanProvider(EntityManagerFactory.class).getIfAvailable();
if (emf != null) {
return new JpaRepositoryContributor(repositoryContext, emf);
}
}
return new JpaRepositoryContributor(repositoryContext);
}
}
}