Skip to content

Commit 4bcc022

Browse files
leassisreda-alaoui
andauthored
Fix type information when using dynamic projection and generic repository (#149)
Co-authored-by: Réda Housni Alaoui <[email protected]>
1 parent 825f5fb commit 4bcc022

File tree

5 files changed

+54
-15
lines changed

5 files changed

+54
-15
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,8 @@ You can play with https://github.com/Cosium/spring-data-jpa-entity-graph-sample
313313

314314
| [Spring Data JPA](https://github.com/spring-projects/spring-data-jpa) version | [Spring Data JPA EntityGraph](https://github.com/Cosium/spring-data-jpa-entity-graph) version |
315315
|-------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
316-
| 3.2.x | [![Maven Central 3.2.x](https://img.shields.io/maven-central/v/com.cosium.spring.data/spring-data-jpa-entity-graph/3.2.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.cosium.spring.data%22%20AND%20a%3A%22spring-data-jpa-entity-graph%22) |
316+
| 3.2.1+ | [![Maven Central 3.2.2+](https://img.shields.io/maven-central/v/com.cosium.spring.data/spring-data-jpa-entity-graph/3.2.2.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.cosium.spring.data%22%20AND%20a%3A%22spring-data-jpa-entity-graph%22) |
317+
| 3.2.0 | [![Maven Central 3.2.1](https://img.shields.io/maven-central/v/com.cosium.spring.data/spring-data-jpa-entity-graph/3.2.1.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.cosium.spring.data%22%20AND%20a%3A%22spring-data-jpa-entity-graph%22) |
317318
| 3.1.x | [![Maven Central 3.1.x](https://img.shields.io/maven-central/v/com.cosium.spring.data/spring-data-jpa-entity-graph/3.1.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.cosium.spring.data%22%20AND%20a%3A%22spring-data-jpa-entity-graph%22) |
318319
| 3.0.x | [![Maven Central 3.0.x](https://img.shields.io/maven-central/v/com.cosium.spring.data/spring-data-jpa-entity-graph/3.0.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.cosium.spring.data%22%20AND%20a%3A%22spring-data-jpa-entity-graph%22) |
319320
| 2.7.x | [![Maven Central 2.7.x](https://img.shields.io/maven-central/v/com.cosium.spring.data/spring-data-jpa-entity-graph/2.7.svg)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.cosium.spring.data%22%20AND%20a%3A%22spring-data-jpa-entity-graph%22) |

core/src/main/java/com/cosium/spring/data/jpa/entity/graph/repository/query/EntityGraphAwareJpaParameters.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
package com.cosium.spring.data.jpa.entity.graph.repository.query;
22

33
import com.cosium.spring.data.jpa.entity.graph.domain2.EntityGraph;
4-
import java.lang.reflect.Method;
54
import org.springframework.core.MethodParameter;
65
import org.springframework.data.jpa.repository.query.JpaParameters;
6+
import org.springframework.data.repository.query.ParametersSource;
7+
import org.springframework.data.util.TypeInformation;
78

89
/**
910
* @author Réda Housni Alaoui
1011
*/
1112
class EntityGraphAwareJpaParameters extends JpaParameters {
1213

13-
public EntityGraphAwareJpaParameters(Method method) {
14-
super(method);
15-
}
16-
17-
@Override
18-
protected JpaParameter createParameter(MethodParameter parameter) {
19-
return new EntityGraphAwareJpaParameter(parameter);
14+
public EntityGraphAwareJpaParameters(ParametersSource parametersSource) {
15+
super(
16+
parametersSource,
17+
methodParameter ->
18+
new EntityGraphAwareJpaParameter(
19+
methodParameter, parametersSource.getDomainTypeInformation()));
2020
}
2121

2222
private static class EntityGraphAwareJpaParameter extends JpaParameters.JpaParameter {
2323

2424
private final boolean entityGraph;
2525

26-
protected EntityGraphAwareJpaParameter(MethodParameter parameter) {
27-
super(parameter);
26+
private EntityGraphAwareJpaParameter(MethodParameter parameter, TypeInformation<?> domainType) {
27+
super(parameter, domainType);
2828
this.entityGraph = EntityGraph.class.isAssignableFrom(parameter.getParameterType());
2929
}
3030

core/src/main/java/com/cosium/spring/data/jpa/entity/graph/repository/query/EntityGraphAwareJpaQueryMethod.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
import java.lang.reflect.Method;
44
import org.springframework.data.jpa.provider.QueryExtractor;
5-
import org.springframework.data.jpa.repository.query.JpaParameters;
65
import org.springframework.data.jpa.repository.query.JpaQueryMethod;
76
import org.springframework.data.projection.ProjectionFactory;
87
import org.springframework.data.repository.core.RepositoryMetadata;
8+
import org.springframework.data.repository.query.Parameters;
9+
import org.springframework.data.repository.query.ParametersSource;
910

1011
/**
1112
* @author Réda Housni Alaoui
@@ -21,7 +22,7 @@ protected EntityGraphAwareJpaQueryMethod(
2122
}
2223

2324
@Override
24-
protected JpaParameters createParameters(Method method) {
25-
return new EntityGraphAwareJpaParameters(method);
25+
protected Parameters<?, ?> createParameters(ParametersSource parametersSource) {
26+
return new EntityGraphAwareJpaParameters(parametersSource);
2627
}
2728
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.cosium.spring.data.jpa.entity.graph.repository;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.cosium.spring.data.jpa.entity.graph.BaseTest;
6+
import com.cosium.spring.data.jpa.entity.graph.sample.Brand;
7+
import com.github.springtestdbunit.annotation.DatabaseSetup;
8+
import jakarta.inject.Inject;
9+
import jakarta.transaction.Transactional;
10+
import java.io.Serializable;
11+
import java.util.Optional;
12+
import org.junit.jupiter.api.DisplayName;
13+
import org.junit.jupiter.api.Test;
14+
import org.springframework.data.repository.NoRepositoryBean;
15+
import org.springframework.data.repository.Repository;
16+
17+
@DatabaseSetup(BaseTest.DATASET)
18+
class DynamicProjectionRepositoryTest extends BaseTest {
19+
20+
@Inject private BrandRepository repository;
21+
22+
@Test
23+
@Transactional
24+
@DisplayName("dynamic projections should work when you have a super class with generics")
25+
void test1() {
26+
var result = repository.findById(1L, Brand.class);
27+
assertThat(result).map(Brand::getId).isPresent();
28+
}
29+
30+
@NoRepositoryBean
31+
public interface EntityGraphBaseRepository<T, I extends Serializable> extends Repository<T, I> {
32+
<X> Optional<X> findById(I id, Class<X> clazz);
33+
}
34+
35+
@org.springframework.stereotype.Repository
36+
public interface BrandRepository extends EntityGraphBaseRepository<Brand, Long> {}
37+
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<properties>
2020
<maven.compiler.release>17</maven.compiler.release>
2121

22-
<spring.data.jpa>3.2.0</spring.data.jpa>
22+
<spring.data.jpa>3.2.1</spring.data.jpa>
2323
<querydsl>5.0.0</querydsl>
2424

2525
<dbunit>2.7.3</dbunit>

0 commit comments

Comments
 (0)