diff --git a/src/main/java/org/springframework/data/jpa/repository/query/StoredProcedureAttributeSource.java b/src/main/java/org/springframework/data/jpa/repository/query/StoredProcedureAttributeSource.java index 76925dd66..cb9173734 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/StoredProcedureAttributeSource.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/StoredProcedureAttributeSource.java @@ -36,6 +36,7 @@ import org.springframework.util.StringUtils; * @author Oliver Gierke * @author Christoph Strobl * @author Mark Paluch + * @author Diego Diez * @since 1.6 */ enum StoredProcedureAttributeSource { @@ -70,7 +71,7 @@ enum StoredProcedureAttributeSource { + method); } - return new StoredProcedureAttributes(procedureName, null, method.getReturnType(), false); + return new StoredProcedureAttributes(procedureName, procedure.outputParameterName(), method.getReturnType(), false); } /** diff --git a/src/test/java/org/springframework/data/jpa/repository/query/StoredProcedureAttributeSourceUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/query/StoredProcedureAttributeSourceUnitTests.java index 796a48c7f..29b893969 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/StoredProcedureAttributeSourceUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/StoredProcedureAttributeSourceUnitTests.java @@ -42,6 +42,7 @@ import org.springframework.util.ReflectionUtils; * @author Thomas Darimont * @author Oliver Gierke * @author Christoph Strobl + * @author Diego Diez * @since 1.6 */ @RunWith(MockitoJUnitRunner.class) @@ -101,6 +102,17 @@ public class StoredProcedureAttributeSourceUnitTests { assertThat(attr.getOutputParameterType(), is(typeCompatibleWith(Integer.class))); assertThat(attr.getOutputParameterName(), is(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME)); } + + @Test // DATAJPA-1297 + public void shouldCreateStoredProcedureAttributesFromProcedureMethodWithExplictProcedureNameAliasAndOutputParameterName() { + + StoredProcedureAttributes attr = creator + .createFrom(method("explicitPlus1inoutViaProcedureNameAliasAndOutputParameterName", Integer.class), entityMetadata); + + assertThat(attr.getProcedureName(), is("plus1inout")); + assertThat(attr.getOutputParameterType(), is(typeCompatibleWith(Integer.class))); + assertThat(attr.getOutputParameterName(), is("res")); + } @Test // DATAJPA-455 public void shouldCreateStoredProcedureAttributesFromProcedureMethodBackedWithExplicitlyNamedProcedure() { @@ -166,12 +178,18 @@ public class StoredProcedureAttributeSourceUnitTests { @Procedure(procedureName = "plus1inout") // DATAJPA-455 Integer explicitPlus1inoutViaProcedureNameAlias(Integer arg); + /** + * Explicitly mapped to a procedure with name "plus1inout" in database via alias and explicityly named ouput parameter. + */ + @Procedure(procedureName = "plus1inout", outputParameterName = "res") // DATAJPA-1297 + Integer explicitPlus1inoutViaProcedureNameAliasAndOutputParameterName(Integer arg); + /** * Implicitly mapped to a procedure with name "plus1inout" in database via alias. */ @Procedure // DATAJPA-455 Integer plus1inout(Integer arg); - + /** * Explicitly mapped to named stored procedure "User.plus1IO" in {@link EntityManager}. */