diff --git a/src/main/java/org/springframework/data/r2dbc/repository/query/R2dbcQueryCreator.java b/src/main/java/org/springframework/data/r2dbc/repository/query/R2dbcQueryCreator.java index 1e55918e..b625a1e5 100644 --- a/src/main/java/org/springframework/data/r2dbc/repository/query/R2dbcQueryCreator.java +++ b/src/main/java/org/springframework/data/r2dbc/repository/query/R2dbcQueryCreator.java @@ -39,6 +39,7 @@ import org.springframework.util.Assert; * * @author Roman Chigvintsev * @author Mark Paluch + * @author Mingyuan Wu * @since 1.1 */ public class R2dbcQueryCreator extends RelationalQueryCreator> { @@ -82,6 +83,10 @@ public class R2dbcQueryCreator extends RelationalQueryCreator complete(Criteria criteria, Sort sort) { StatementMapper statementMapper = dataAccessStrategy.getStatementMapper().forType(entityMetadata.getJavaType()); + if(tree.isDelete()){ + StatementMapper.DeleteSpec deleteSpec = statementMapper.createDelete(entityMetadata.getTableName()).withCriteria(criteria); + return statementMapper.getMappedObject(deleteSpec); + } StatementMapper.SelectSpec selectSpec = statementMapper.createSelect(entityMetadata.getTableName()) .withProjection(getSelectProjection()); diff --git a/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java b/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java index a57c01da..0a32d060 100644 --- a/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java +++ b/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java @@ -592,6 +592,17 @@ public class PartTreeR2dbcQueryUnitTests { .isEqualTo("SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".first_name = $1 LIMIT 1"); } + @Test // gh-341 + public void createsQueryToDeleteByFirstName() throws Exception { + R2dbcQueryMethod queryMethod = getQueryMethod("deleteByFirstName", String.class); + PartTreeR2dbcQuery r2dbcQuery = new PartTreeR2dbcQuery(queryMethod, databaseClient, r2dbcConverter, + dataAccessStrategy); + RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[] { "John" }); + BindableQuery bindableQuery = r2dbcQuery.createQuery(accessor); + String expectedSql = "DELETE FROM "+ TABLE + " WHERE " + TABLE + ".first_name = $1" ; + assertThat(bindableQuery.get()).isEqualTo(expectedSql); + } + private R2dbcQueryMethod getQueryMethod(String methodName, Class... parameterTypes) throws Exception { Method method = UserRepository.class.getMethod(methodName, parameterTypes); return new R2dbcQueryMethod(method, new DefaultRepositoryMetadata(UserRepository.class), @@ -669,6 +680,8 @@ public class PartTreeR2dbcQueryUnitTests { Flux findTop3ByFirstName(String firstName); Mono findFirstByFirstName(String firstName); + + Mono deleteByFirstName(String firstName); } @Table("users")