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:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user