Invoke callbacks for find by Query methods.

Callback handlers are now properly called for findAll/One with Query parameter.

Closes #1979
This commit is contained in:
Jens Schauder
2025-01-13 09:37:06 +01:00
parent bb8bde22b1
commit f7462c47f8
2 changed files with 55 additions and 5 deletions

View File

@@ -319,12 +319,15 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations {
@Override
public <T> Optional<T> findOne(Query query, Class<T> domainType) {
return accessStrategy.findOne(query, domainType);
return accessStrategy.findOne(query, domainType).map(this::triggerAfterConvert);
}
@Override
public <T> Iterable<T> findAll(Query query, Class<T> domainType) {
return accessStrategy.findAll(query, domainType);
public <T> List<T> findAll(Query query, Class<T> domainType) {
Iterable<T> all = accessStrategy.findAll(query, domainType);
return triggerAfterConvert(all);
}
@Override

View File

@@ -47,8 +47,11 @@ import org.springframework.data.relational.core.mapping.event.AfterSaveCallback;
import org.springframework.data.relational.core.mapping.event.BeforeConvertCallback;
import org.springframework.data.relational.core.mapping.event.BeforeDeleteCallback;
import org.springframework.data.relational.core.mapping.event.BeforeSaveCallback;
import org.springframework.data.relational.core.query.Criteria;
import org.springframework.data.relational.core.query.Query;
import java.util.List;
import java.util.Optional;
/**
* Unit tests for {@link JdbcAggregateTemplate}.
@@ -299,12 +302,13 @@ public class JdbcAggregateTemplateUnitTests {
SampleEntity neumann1 = new SampleEntity(42L, "Neumann");
SampleEntity neumann2 = new SampleEntity(42L, "Alfred E. Neumann");
when(dataAccessStrategy.findAll(SampleEntity.class, PageRequest.of(0, 20))).thenReturn(asList(alfred1, neumann1));
PageRequest pageRequest = PageRequest.of(0, 20);
when(dataAccessStrategy.findAll(SampleEntity.class, pageRequest)).thenReturn(asList(alfred1, neumann1));
when(callbacks.callback(any(Class.class), eq(alfred1), any(Object[].class))).thenReturn(alfred2);
when(callbacks.callback(any(Class.class), eq(neumann1), any(Object[].class))).thenReturn(neumann2);
Iterable<SampleEntity> all = template.findAll(SampleEntity.class, PageRequest.of(0, 20));
Iterable<SampleEntity> all = template.findAll(SampleEntity.class, pageRequest);
verify(callbacks).callback(AfterConvertCallback.class, alfred1);
verify(callbacks).callback(AfterConvertCallback.class, neumann1);
@@ -312,6 +316,49 @@ public class JdbcAggregateTemplateUnitTests {
assertThat(all).containsExactly(alfred2, neumann2);
}
@Test // GH-1979
void callbackOnFindAllByQuery() {
SampleEntity alfred1 = new SampleEntity(23L, "Alfred");
SampleEntity alfred2 = new SampleEntity(23L, "Alfred E.");
SampleEntity neumann1 = new SampleEntity(42L, "Neumann");
SampleEntity neumann2 = new SampleEntity(42L, "Alfred E. Neumann");
Query query = Query.query(Criteria.where("not relevant").is("for test"));
when(dataAccessStrategy.findAll(query, SampleEntity.class)).thenReturn(asList(alfred1, neumann1));
when(callbacks.callback(any(Class.class), eq(alfred1), any(Object[].class))).thenReturn(alfred2);
when(callbacks.callback(any(Class.class), eq(neumann1), any(Object[].class))).thenReturn(neumann2);
Iterable<SampleEntity> all = template.findAll(query, SampleEntity.class);
verify(callbacks).callback(AfterConvertCallback.class, alfred1);
verify(callbacks).callback(AfterConvertCallback.class, neumann1);
assertThat(all).containsExactly(alfred2, neumann2);
}
@Test // GH-1979
void callbackOnFindOneByQuery() {
SampleEntity alfred1 = new SampleEntity(23L, "Alfred");
SampleEntity alfred2 = new SampleEntity(23L, "Alfred E.");
Query query = Query.query(Criteria.where("not relevant").is("for test"));
when(dataAccessStrategy.findOne(query, SampleEntity.class)).thenReturn(Optional.of(alfred1));
when(callbacks.callback(any(Class.class), eq(alfred1), any(Object[].class))).thenReturn(alfred2);
Optional<SampleEntity> all = template.findOne(query, SampleEntity.class);
verify(callbacks).callback(AfterConvertCallback.class, alfred1);
assertThat(all).contains(alfred2);
}
@Test // GH-1401
void saveAllWithEmptyListDoesNothing() {
assertThat(template.saveAll(emptyList())).isEmpty();