Skip to content

Commit 946a173

Browse files
committed
Support Optional<> for Filters
So far, `Optional<>` was only supported on `findOne` methods. Based on https://jira.spring.io/browse/DATACMNS-483 this change now also support `Optional<>` for `findBy` methods. Fixes #27.
1 parent f09d25b commit 946a173

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

src/main/java/org/socialsignin/spring/data/dynamodb/query/AbstractMultipleEntityQuery.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.List;
1919

2020
import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations;
21-
import org.springframework.dao.EmptyResultDataAccessException;
2221
import org.springframework.dao.IncorrectResultSizeDataAccessException;
2322

2423
/**
@@ -38,8 +37,11 @@ public T getSingleResult() {
3837
throw new IncorrectResultSizeDataAccessException("result returns more than one elements", 1, results.size());
3938
}
4039
if (results.size() == 0) {
41-
throw new EmptyResultDataAccessException("No results found", 1);
40+
// return null here as Spring will convert that to Optional if nessassary
41+
// https://jira.spring.io/browse/DATACMNS-483
42+
return null;
43+
} else {
44+
return results.get(0);
4245
}
43-
return results.get(0);
4446
}
4547
}

src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Jdk8IT.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ public static class TestAppConfig {
3535
UserRepository userRepository;
3636

3737
@Test
38-
public void testOptional() {
38+
public void testOptionalKey() {
3939
final Date joinDate = new Date(1000);
40-
final String id = "testOptional";
40+
final String id = "testOptionalKey";
4141
Optional<User> result = userRepository.findOne(id);
4242

4343
assertNotNull(result);
@@ -55,6 +55,29 @@ public void testOptional() {
5555
assertEquals(savedEntity, result.get());
5656
assertEquals(joinDate, result.get().getJoinDate());
5757
}
58+
59+
@Test
60+
public void testOptionalFilter() {
61+
final Date joinDate = new Date(2000);
62+
final String id = "testOptionalFilter";
63+
final String name = UUID.randomUUID().toString();
64+
Optional<User> result = userRepository.findByName(name);
65+
66+
assertNotNull(result);
67+
assertEquals(result, Optional.empty());
68+
69+
User newUser = new User();
70+
newUser.setId(id);
71+
newUser.setName(name);
72+
newUser.setJoinDate(joinDate);
73+
74+
User savedEntity = userRepository.save(newUser);
75+
76+
result = userRepository.findByName(name);
77+
assertNotNull(result);
78+
assertEquals(savedEntity, result.get());
79+
assertEquals(joinDate, result.get().getJoinDate());
80+
}
5881

5982
@Test
6083
public void testInstantQuery() {

src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,8 @@ public interface UserRepository extends Repository<User, String> {
1515
@EnableScan
1616
List<User> findByLeaveDate(Instant leaveDate);
1717

18+
@EnableScan
19+
Optional<User> findByName(String name);
20+
1821
<T extends User> User save(T entity);
1922
}

0 commit comments

Comments
 (0)