Skip to content

Commit 6bf3610

Browse files
committed
Refine AOT fragment constructor parameter lookup.
Closes #3991
1 parent f13eaf5 commit 6bf3610

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaRepositoryContributor.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.jspecify.annotations.Nullable;
2828

2929
import org.springframework.beans.BeanUtils;
30+
import org.springframework.beans.factory.config.RuntimeBeanReference;
3031
import org.springframework.core.annotation.AnnotatedElementUtils;
3132
import org.springframework.core.annotation.MergedAnnotation;
3233
import org.springframework.core.annotation.MergedAnnotations;
@@ -120,7 +121,16 @@ protected void customizeClass(AotRepositoryClassBuilder classBuilder) {
120121
@Override
121122
protected void customizeConstructor(AotRepositoryConstructorBuilder constructorBuilder) {
122123

123-
constructorBuilder.addParameter("entityManager", EntityManager.class);
124+
String entityManagerFactoryRef = getEntityManagerFactoryRef();
125+
126+
constructorBuilder.addParameter("entityManager", EntityManager.class, customizer -> {
127+
128+
customizer.bindToField().origin(
129+
StringUtils.hasText(entityManagerFactoryRef)
130+
? new RuntimeBeanReference(entityManagerFactoryRef, EntityManager.class)
131+
: new RuntimeBeanReference(EntityManager.class));
132+
});
133+
124134
constructorBuilder.addParameter("context", RepositoryFactoryBeanSupport.FragmentCreationContext.class);
125135

126136
Optional<Class<QueryEnhancerSelector>> queryEnhancerSelector = getQueryEnhancerSelectorClass();
@@ -135,6 +145,11 @@ protected void customizeConstructor(AotRepositoryConstructorBuilder constructorB
135145
});
136146
}
137147

148+
private String getEntityManagerFactoryRef() {
149+
return context.getConfigurationSource().getAttribute("entityManagerFactoryRef")
150+
.filter(it -> !"entityManagerFactory".equals(it)).orElse(null);
151+
}
152+
138153
@SuppressWarnings({ "rawtypes", "unchecked" })
139154
private Optional<Class<QueryEnhancerSelector>> getQueryEnhancerSelectorClass() {
140155
return (Optional) context.getConfigurationSource().getAttribute("queryEnhancerSelector", Class.class)

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/QueriesFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ private boolean hasNamedQuery(ReturnedType returnedType, String queryName) {
141141
private AotQueries buildStringQuery(Class<?> domainType, ReturnedType returnedType, QueryEnhancerSelector selector,
142142
MergedAnnotation<Query> query, JpaQueryMethod queryMethod) {
143143

144-
UnaryOperator<String> operator = s -> s.replaceAll("#\\{#entityName}", domainType.getName());
144+
UnaryOperator<String> operator = s -> s.replaceAll("#\\{#entityName}", domainType.getSimpleName());
145145
boolean isNative = query.getBoolean("nativeQuery");
146146
Function<String, DeclaredQuery> queryFunction = isNative ? DeclaredQuery::nativeQuery : DeclaredQuery::jpqlQuery;
147147
queryFunction = operator.andThen(queryFunction);

0 commit comments

Comments
 (0)