Skip to content

Commit 6149394

Browse files
committed
Change SqlQuery + Mapper + findOne() also to throw NonUniqueResultException
1 parent 05f7c0b commit 6149394

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultRelationalQueryEngine.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,14 @@ public <T> T findOne(RelationalQueryRequest request, RowMapper<T> mapper) {
116116
try {
117117
request.executeSql(binder, SpiQuery.Type.BEAN);
118118
T value = request.mapOne(mapper);
119+
if (request.next()) {
120+
throw new NonUniqueResultException("Got more than 1 result for findOne");
121+
}
119122
request.logSummary();
120123
return value;
121124

125+
} catch (NonUniqueResultException e) {
126+
throw e;
122127
} catch (Exception e) {
123128
throw new PersistenceException(errMsg(e.getMessage(), request.getSql()), e);
124129

ebean-test/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,18 @@ void findOne_mapper() {
388388
assertThat(rob.name).isEqualTo("Rob");
389389
}
390390

391+
@Test
392+
void findOne_mapper_when_notUnique() {
393+
ResetBasicData.reset();
394+
395+
String sql = "select id, name, status from o_customer order by name desc";
396+
assertThatThrownBy(() -> DB.sqlQuery(sql)
397+
.mapTo(CUST_MAPPER)
398+
.findOne())
399+
.isInstanceOf(NonUniqueResultException.class)
400+
.hasMessageContaining("Got more than 1 result for findOne");
401+
}
402+
391403
@Test
392404
void findList_mapper() {
393405
ResetBasicData.reset();

0 commit comments

Comments
 (0)