Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 80ff7cb

Browse files
Merge branch '3.5.x'
Closes gh-46635
2 parents 395ffb2 + 09ed59f commit 80ff7cb

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

‎module/spring-boot-data-jpa/src/main/java/org/springframework/boot/data/jpa/autoconfigure/JpaRepositoriesAutoConfiguration.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.jspecify.annotations.Nullable;
2424

25+
import org.springframework.boot.LazyInitializationExcludeFilter;
2526
import org.springframework.boot.autoconfigure.AutoConfiguration;
2627
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2728
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
@@ -93,6 +94,11 @@ EntityManagerFactoryBuilderCustomizer entityManagerFactoryBootstrapExecutorCusto
9394
};
9495
}
9596

97+
@Bean
98+
static LazyInitializationExcludeFilter eagerJpaMetamodelCacheCleanup() {
99+
return (name, definition, type) -> "org.springframework.data.jpa.util.JpaMetamodelCacheCleanup".equals(name);
100+
}
101+
96102
private @Nullable AsyncTaskExecutor determineBootstrapExecutor(Map<String, AsyncTaskExecutor> taskExecutors) {
97103
if (taskExecutors.size() == 1) {
98104
return taskExecutors.values().iterator().next();

‎module/spring-boot-data-jpa/src/test/java/org/springframework/boot/data/jpa/autoconfigure/AbstractJpaRepositoriesAutoConfigurationTests.java‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@
1616

1717
package org.springframework.boot.data.jpa.autoconfigure;
1818

19+
import java.util.Map;
20+
1921
import jakarta.persistence.EntityManagerFactory;
22+
import jakarta.persistence.metamodel.Metamodel;
2023
import org.junit.jupiter.api.Test;
2124

25+
import org.springframework.boot.LazyInitializationBeanFactoryPostProcessor;
2226
import org.springframework.boot.autoconfigure.AutoConfigurations;
2327
import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
2428
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
@@ -35,8 +39,10 @@
3539
import org.springframework.context.annotation.Import;
3640
import org.springframework.core.task.SimpleAsyncTaskExecutor;
3741
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
42+
import org.springframework.data.jpa.util.JpaMetamodel;
3843
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
3944
import org.springframework.scheduling.annotation.EnableScheduling;
45+
import org.springframework.test.util.ReflectionTestUtils;
4046
import org.springframework.transaction.PlatformTransactionManager;
4147

4248
import static org.assertj.core.api.Assertions.assertThat;
@@ -133,6 +139,19 @@ void bootstrapModeIsDefaultByDefault() {
133139
.isNull());
134140
}
135141

142+
@Test
143+
void whenLazyInitializationIsEnabledJpaMetamodelCacheIsClearedOnContextClose() {
144+
this.contextRunner.withUserConfiguration(TestConfiguration.class)
145+
.withBean(LazyInitializationBeanFactoryPostProcessor.class)
146+
.run((context) -> assertThat(jpaMetamodelCache()).isNotEmpty());
147+
assertThat(jpaMetamodelCache()).isEmpty();
148+
}
149+
150+
@SuppressWarnings("unchecked")
151+
private Map<Metamodel, JpaMetamodel> jpaMetamodelCache() {
152+
return (Map<Metamodel, JpaMetamodel>) ReflectionTestUtils.getField(JpaMetamodel.class, "CACHE");
153+
}
154+
136155
@Configuration(proxyBeanMethods = false)
137156
@EnableScheduling
138157
@Import(TestConfiguration.class)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /