diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java index 2e7b4d5ae..9e343750e 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIntegrationTests.java @@ -104,6 +104,7 @@ import org.springframework.test.jdbc.JdbcTestUtils; * @author Diego Krupitza * @author Christopher Klein * @author Mikhail Polivakha + * @author Paul Jones */ @IntegrationTest public class JdbcRepositoryIntegrationTests { @@ -1286,6 +1287,36 @@ public class JdbcRepositoryIntegrationTests { assertThat(match.get().getName()).contains(two.getName()); } + @Test + void fetchDtoWithNoArgsConstructorWithAggregateReferencePopulated() { + + DummyEntity entity = new DummyEntity(); + entity.setRef(AggregateReference.to(20L)); + entity.setName("Test Dto"); + repository.save(entity); + + assertThat(repository.findById(entity.idProp).orElseThrow().getRef()).isEqualTo(AggregateReference.to(20L)); + + DummyDto foundDto = repository.findDtoByIdProp(entity.idProp).orElseThrow(); + assertThat(foundDto.getName()).isEqualTo("Test Dto"); + assertThat(foundDto.getRef()).isEqualTo(AggregateReference.to(20L)); + } + + @Test // GH-1759 + void fetchDtoWithAllArgsConstructorWithAggregateReferencePopulated() { + + DummyEntity entity = new DummyEntity(); + entity.setRef(AggregateReference.to(20L)); + entity.setName("Test Dto"); + repository.save(entity); + + assertThat(repository.findById(entity.idProp).orElseThrow().getRef()).isEqualTo(AggregateReference.to(20L)); + + DummyAllArgsDto foundDto = repository.findAllArgsDtoByIdProp(entity.idProp).orElseThrow(); + assertThat(foundDto.getName()).isEqualTo("Test Dto"); + assertThat(foundDto.getRef()).isEqualTo(AggregateReference.to(20L)); + } + @Test // GH-1405 void withDelimitedColumnTest() { @@ -1426,6 +1457,10 @@ public class JdbcRepositoryIntegrationTests { @Query("SELECT * FROM DUMMY_ENTITY WHERE DIRECTION = :direction") List findByEnumType(Direction direction); + + Optional findDtoByIdProp(Long idProp); + + Optional findAllArgsDtoByIdProp(Long idProp); } interface RootRepository extends ListCrudRepository { @@ -1834,6 +1869,42 @@ public class JdbcRepositoryIntegrationTests { LEFT, CENTER, RIGHT } + static class DummyDto { + @Id Long idProp; + String name; + AggregateReference ref; + + public DummyDto() {} + + public String getName() { + return name; + } + + public AggregateReference getRef() { + return ref; + } + } + + static class DummyAllArgsDto { + @Id Long idProp; + String name; + AggregateReference ref; + + public DummyAllArgsDto(Long idProp, String name, AggregateReference ref) { + this.idProp = idProp; + this.name = name; + this.ref = ref; + } + + public String getName() { + return name; + } + + public AggregateReference getRef() { + return ref; + } + } + interface DummyProjection { String getName(); }