DATAJPA-707 - Polishing.
Code formatting. Refactoring to improve readability. Original pull request: #297.
This commit is contained in:
@@ -72,7 +72,7 @@ enum StoredProcedureAttributeSource {
|
||||
+ method);
|
||||
}
|
||||
|
||||
return new StoredProcedureAttributes(procedureName, procedure.outputParameterName(), method.getReturnType(), false);
|
||||
return new StoredProcedureAttributes(procedureName, procedure.outputParameterName(), method.getReturnType());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,13 +15,12 @@
|
||||
*/
|
||||
package org.springframework.data.jpa.repository.query;
|
||||
|
||||
import javax.persistence.StoredProcedureQuery;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import javax.persistence.StoredProcedureQuery;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
@@ -33,11 +32,12 @@ import java.util.stream.IntStream;
|
||||
* @author Oliver Gierke
|
||||
* @author Mark Paluch
|
||||
* @author Jeff Sheets
|
||||
* @author Jens Schauder
|
||||
* @since 1.6
|
||||
*/
|
||||
class StoredProcedureAttributes {
|
||||
|
||||
// A syntheic output parameter name to be used in case of derived stored procedures and named parameters
|
||||
// A synthetic output parameter name to be used in case of derived stored procedures and named parameters
|
||||
static final String SYNTHETIC_OUTPUT_PARAMETER_NAME = "out";
|
||||
|
||||
private final boolean namedStoredProcedure;
|
||||
@@ -48,26 +48,25 @@ class StoredProcedureAttributes {
|
||||
/**
|
||||
* Creates a new {@link StoredProcedureAttributes}.
|
||||
*
|
||||
* @param procedureName must not be {@literal null}
|
||||
* @param outputParameterName may be {@literal null}
|
||||
* @param outputParameterType must not be {@literal null}
|
||||
* @param namedStoredProcedure
|
||||
* @param procedureName must not be {@literal null}.
|
||||
* @param outputParameterName may be {@literal null}.
|
||||
* @param outputParameterType must not be {@literal null}.
|
||||
*/
|
||||
public StoredProcedureAttributes(String procedureName, @Nullable String outputParameterName,
|
||||
Class<?> outputParameterType, boolean namedStoredProcedure) {
|
||||
this(procedureName, Arrays.asList(outputParameterName), Arrays.asList(outputParameterType), namedStoredProcedure);
|
||||
StoredProcedureAttributes(String procedureName, @Nullable String outputParameterName,
|
||||
Class<?> outputParameterType) {
|
||||
this(procedureName, Collections.singletonList(outputParameterName), Collections.singletonList(outputParameterType), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link StoredProcedureAttributes}.
|
||||
*
|
||||
* @param procedureName must not be {@literal null}
|
||||
* @param outputParameterNames may be empty, but not null
|
||||
* @param outputParameterTypes must not be empty, and cannot be a single element of null
|
||||
* @param namedStoredProcedure
|
||||
* @param procedureName must not be {@literal null}.
|
||||
* @param outputParameterNames may be empty, but not {@literal null}.
|
||||
* @param outputParameterTypes must not be empty, and cannot be a single element of {@literal null}.
|
||||
* @param namedStoredProcedure flag signaling if the stored procedure has a name.
|
||||
*/
|
||||
public StoredProcedureAttributes(String procedureName, List<String> outputParameterNames,
|
||||
List<Class<?>> outputParameterTypes, boolean namedStoredProcedure) {
|
||||
StoredProcedureAttributes(String procedureName, List<String> outputParameterNames,
|
||||
List<Class<?>> outputParameterTypes, boolean namedStoredProcedure) {
|
||||
|
||||
Assert.notNull(procedureName, "ProcedureName must not be null!");
|
||||
Assert.notNull(outputParameterNames, "OutputParameterNames must not be null!");
|
||||
@@ -75,14 +74,31 @@ class StoredProcedureAttributes {
|
||||
Assert.isTrue(outputParameterTypes.size() != 1 || outputParameterTypes.get(0) != null, "OutputParameterTypes must not have size 1 with a null value");
|
||||
|
||||
this.procedureName = procedureName;
|
||||
this.outputParameterNames = namedStoredProcedure ? outputParameterNames : IntStream.range(0, outputParameterNames.size()).mapToObj(i -> {
|
||||
String paramName = outputParameterNames.get(i);
|
||||
return !StringUtils.hasText(paramName) ? SYNTHETIC_OUTPUT_PARAMETER_NAME + (i == 0 ? "" : i) : paramName;
|
||||
}).collect(Collectors.toList());
|
||||
this.outputParameterNames = namedStoredProcedure
|
||||
? outputParameterNames
|
||||
: completeOutputParameterNames(outputParameterNames);
|
||||
this.outputParameterTypes = outputParameterTypes;
|
||||
this.namedStoredProcedure = namedStoredProcedure;
|
||||
}
|
||||
|
||||
private List<String> completeOutputParameterNames(List<String> outputParameterNames) {
|
||||
|
||||
return IntStream.range(0, outputParameterNames.size()) //
|
||||
.mapToObj(i -> completeOutputParameterName(i, outputParameterNames.get(i))) //
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private String completeOutputParameterName(int i, String paramName) {
|
||||
|
||||
return StringUtils.hasText(paramName) //
|
||||
? paramName //
|
||||
: createSyntheticParameterName(i);
|
||||
}
|
||||
|
||||
private String createSyntheticParameterName(int i) {
|
||||
return SYNTHETIC_OUTPUT_PARAMETER_NAME + (i == 0 ? "" : i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the stored procedure.
|
||||
*
|
||||
|
||||
@@ -15,12 +15,6 @@
|
||||
*/
|
||||
package org.springframework.data.jpa.repository.query;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.NamedStoredProcedureQuery;
|
||||
import javax.persistence.ParameterMode;
|
||||
import javax.persistence.StoredProcedureQuery;
|
||||
import javax.persistence.TypedQuery;
|
||||
|
||||
import org.springframework.data.jpa.repository.query.JpaParameters.JpaParameter;
|
||||
import org.springframework.data.repository.query.Parameter;
|
||||
import org.springframework.data.repository.query.QueryMethod;
|
||||
@@ -28,6 +22,11 @@ import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.NamedStoredProcedureQuery;
|
||||
import javax.persistence.ParameterMode;
|
||||
import javax.persistence.StoredProcedureQuery;
|
||||
import javax.persistence.TypedQuery;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
@@ -53,7 +52,7 @@ class StoredProcedureJpaQuery extends AbstractJpaQuery {
|
||||
* Creates a new {@link StoredProcedureJpaQuery}.
|
||||
*
|
||||
* @param method must not be {@literal null}
|
||||
* @param em must not be {@literal null}
|
||||
* @param em must not be {@literal null}
|
||||
*/
|
||||
StoredProcedureJpaQuery(JpaQueryMethod method, EntityManager em) {
|
||||
|
||||
@@ -110,8 +109,8 @@ class StoredProcedureJpaQuery extends AbstractJpaQuery {
|
||||
* Extracts the output value from the given {@link StoredProcedureQuery}.
|
||||
*
|
||||
* @param storedProcedureQuery must not be {@literal null}.
|
||||
*
|
||||
* Result is either a single value, or a Map<String, Object> of output parameter names to values
|
||||
* <p>
|
||||
* Result is either a single value, or a Map<String, Object> of output parameter names to values
|
||||
*/
|
||||
@Nullable
|
||||
Object extractOutputValue(StoredProcedureQuery storedProcedureQuery) {
|
||||
@@ -122,23 +121,44 @@ class StoredProcedureJpaQuery extends AbstractJpaQuery {
|
||||
return null;
|
||||
}
|
||||
|
||||
Map<String, Object> outputValues = IntStream.range(0, procedureAttributes.getOutputParameterNames().size())
|
||||
.boxed().collect(Collectors.toMap(procedureAttributes.getOutputParameterNames()::get, i -> {
|
||||
String outputParameterName = procedureAttributes.getOutputParameterNames().get(i);
|
||||
JpaParameters parameters = getQueryMethod().getParameters();
|
||||
|
||||
return useNamedParameters && StringUtils.hasText(outputParameterName) ? //
|
||||
storedProcedureQuery.getOutputParameterValue(outputParameterName)
|
||||
: storedProcedureQuery.getOutputParameterValue(parameters.getNumberOfParameters() + i + 1);
|
||||
}));
|
||||
Map<String, Object> outputValues = IntStream.range(0, procedureAttributes.getOutputParameterNames().size()) //
|
||||
.boxed() //
|
||||
.collect(Collectors.toMap( //
|
||||
procedureAttributes.getOutputParameterNames()::get, //
|
||||
i -> extractOutputParameter(storedProcedureQuery, i)));
|
||||
|
||||
return outputValues.size() == 1 ? outputValues.values().iterator().next() : outputValues;
|
||||
}
|
||||
|
||||
private Object extractOutputParameter(StoredProcedureQuery storedProcedureQuery, Integer index) {
|
||||
|
||||
String outputParameterName = procedureAttributes.getOutputParameterNames().get(index);
|
||||
JpaParameters parameters = getQueryMethod().getParameters();
|
||||
|
||||
return extractOutputParameterValue(storedProcedureQuery, outputParameterName, index, parameters.getNumberOfParameters());
|
||||
}
|
||||
|
||||
/**
|
||||
* extract the value of an output parameter either by name or by index.
|
||||
*
|
||||
* @param storedProcedureQuery the query object of the stored procedure.
|
||||
* @param name the name of the output parameter
|
||||
* @param index index of the output parameter
|
||||
* @param offset for index based access the index after which to find the output parameter values
|
||||
* @return the value
|
||||
*/
|
||||
private Object extractOutputParameterValue(StoredProcedureQuery storedProcedureQuery, String name, Integer index, int offset) {
|
||||
|
||||
return useNamedParameters && StringUtils.hasText(name) ? //
|
||||
storedProcedureQuery.getOutputParameterValue(name)
|
||||
: storedProcedureQuery.getOutputParameterValue(offset + index + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new JPA 2.1 {@link StoredProcedureQuery} from this {@link StoredProcedureJpaQuery}.
|
||||
*/
|
||||
private StoredProcedureQuery createStoredProcedure() {
|
||||
|
||||
return procedureAttributes.isNamedStoredProcedure() ? newNamedStoredProcedureQuery()
|
||||
: newAdhocStoredProcedureQuery();
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ import javax.persistence.StoredProcedureParameter;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
/**
|
||||
* Sample domain class representing used for Stored Procedure tests.
|
||||
* Sample domain class used for Stored Procedure tests.
|
||||
*
|
||||
* @author Thomas Darimont
|
||||
*/
|
||||
|
||||
@@ -15,19 +15,7 @@
|
||||
*/
|
||||
package org.springframework.data.jpa.repository;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.hamcrest.Matchers.hasEntry;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assume.*;
|
||||
import static org.springframework.data.jpa.support.EntityManagerTestUtils.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
import org.junit.Assume;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
||||
@@ -36,94 +24,83 @@ import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.ParameterMode;
|
||||
import javax.persistence.PersistenceContext;
|
||||
import javax.persistence.StoredProcedureQuery;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
/**
|
||||
* Integration tests for JPA 2.1 stored procedure support.
|
||||
*
|
||||
* @author Thomas Darimont
|
||||
* @author Oliver Gierke
|
||||
* @author Jeff Sheets
|
||||
* @author Jens Schauder
|
||||
* @since 1.6
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration("classpath:application-context.xml")
|
||||
@Transactional
|
||||
public class UserRepositoryStoredProcedureTests {
|
||||
public class UserRepositoryStoredProcedureIntegrationTests {
|
||||
|
||||
@Autowired UserRepository repository;
|
||||
@PersistenceContext EntityManager em;
|
||||
|
||||
@Rule public ExpectedException exception = ExpectedException.none();
|
||||
@Autowired
|
||||
UserRepository repository;
|
||||
@PersistenceContext
|
||||
EntityManager em;
|
||||
|
||||
@Test // DATAJPA-455
|
||||
public void callProcedureWithInAndOutParameters() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
assertThat(repository.plus1inout(1), is(2));
|
||||
assertThat(repository.plus1inout(1)).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-707
|
||||
public void callProcedureWithInAndOutParametersInvalidOutParamName() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
assertThat(repository.plus1inoutInvalidOutParamName(1), is(2));
|
||||
assertThat(repository.plus1inoutInvalidOutParamName(1)).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
public void callProcedureExplicitNameWithInAndOutParameters() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
assertThat(repository.explicitlyNamedPlus1inout(1), is(2));
|
||||
assertThat(repository.explicitlyNamedPlus1inout(1)).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
public void entityAnnotatedCustomNamedProcedurePlus1IO() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
assertThat(repository.entityAnnotatedCustomNamedProcedurePlus1IO(1), is(2));
|
||||
assertThat(repository.entityAnnotatedCustomNamedProcedurePlus1IO(1)).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-707
|
||||
public void entityAnnotatedCustomNamedProcedurePlus1IOInvalidOutParamName() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
exception.expect(InvalidDataAccessApiUsageException.class);
|
||||
exception.expectMessage(containsString("Could not locate parameter registered under that name"));
|
||||
|
||||
repository.entityAnnotatedCustomNamedProcedurePlus1IOInvalidOutParamName(1);
|
||||
assertThatThrownBy( //
|
||||
() -> repository.entityAnnotatedCustomNamedProcedurePlus1IOInvalidOutParamName(1)) //
|
||||
.isInstanceOf(InvalidDataAccessApiUsageException.class) //
|
||||
.hasMessageContaining("Could not locate parameter registered under that name");
|
||||
}
|
||||
|
||||
@Test // DATAJPA-707
|
||||
public void entityAnnotatedCustomNamedProcedurePlus1IO2TwoOutParamsButNamingOne() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
assertThat(repository.entityAnnotatedCustomNamedProcedurePlus1IO2TwoOutParamsButNamingOne(1), is(3));
|
||||
assertThat(repository.entityAnnotatedCustomNamedProcedurePlus1IO2TwoOutParamsButNamingOne(1)).isEqualTo(3);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-707
|
||||
public void entityAnnotatedCustomNamedProcedurePlus1IO2() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
Map<String, Integer> result = repository.entityAnnotatedCustomNamedProcedurePlus1IO2(1);
|
||||
assertThat(result, hasEntry("res", 2));
|
||||
assertThat(result, hasEntry("res2", 3));
|
||||
assertThat(result.size(), is(2));
|
||||
|
||||
assertThat(result).containsExactly(entry("res", 2), entry("res2", 3));
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
@Ignore
|
||||
public void plainJpa21() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
StoredProcedureQuery proc = em.createStoredProcedureQuery("plus1inout");
|
||||
proc.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
|
||||
proc.registerStoredProcedureParameter(2, Integer.class, ParameterMode.OUT);
|
||||
@@ -131,29 +108,23 @@ public class UserRepositoryStoredProcedureTests {
|
||||
proc.setParameter(1, 1);
|
||||
proc.execute();
|
||||
|
||||
assertThat(proc.getOutputParameterValue(2), is((Object) 2));
|
||||
assertThat(proc.getOutputParameterValue(2)).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
@Ignore
|
||||
public void plainJpa21_entityAnnotatedCustomNamedProcedurePlus1IO() {
|
||||
|
||||
Assume.assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
StoredProcedureQuery proc = em.createNamedStoredProcedureQuery("User.plus1IO");
|
||||
|
||||
proc.setParameter("arg", 1);
|
||||
proc.execute();
|
||||
|
||||
assertThat(proc.getOutputParameterValue("res"), is((Object) 2));
|
||||
assertThat(proc.getOutputParameterValue("res")).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-707
|
||||
@Ignore
|
||||
public void plainJpa21_twoOutParams() {
|
||||
|
||||
assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
StoredProcedureQuery proc = em.createStoredProcedureQuery("plus1inout2");
|
||||
proc.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
|
||||
proc.registerStoredProcedureParameter(2, Integer.class, ParameterMode.OUT);
|
||||
@@ -162,22 +133,19 @@ public class UserRepositoryStoredProcedureTests {
|
||||
proc.setParameter(1, 1);
|
||||
proc.execute();
|
||||
|
||||
assertThat(proc.getOutputParameterValue(2), is((Object) 2));
|
||||
assertThat(proc.getOutputParameterValue(3), is((Object) 3));
|
||||
assertThat(proc.getOutputParameterValue(2)).isEqualTo(2);
|
||||
assertThat(proc.getOutputParameterValue(3)).isEqualTo(3);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-707
|
||||
@Ignore
|
||||
public void plainJpa21_entityAnnotatedCustomNamedProcedurePlus1IO2() {
|
||||
|
||||
Assume.assumeTrue(currentEntityManagerIsAJpa21EntityManager(em));
|
||||
|
||||
StoredProcedureQuery proc = em.createNamedStoredProcedureQuery("User.plus1IO2");
|
||||
|
||||
proc.setParameter("arg", 1);
|
||||
proc.execute();
|
||||
|
||||
assertThat(proc.getOutputParameterValue("res"), is((Object) 2));
|
||||
assertThat(proc.getOutputParameterValue("res2"), is((Object) 3));
|
||||
assertThat(proc.getOutputParameterValue("res")).isEqualTo(2);
|
||||
assertThat(proc.getOutputParameterValue("res2")).isEqualTo(3);
|
||||
}
|
||||
}
|
||||
@@ -15,18 +15,6 @@
|
||||
*/
|
||||
package org.springframework.data.jpa.repository.query;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.hamcrest.object.IsCompatibleType.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -37,6 +25,15 @@ import org.springframework.data.jpa.domain.sample.User;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link StoredProcedureAttributeSource}.
|
||||
*
|
||||
@@ -45,13 +42,15 @@ import org.springframework.util.ReflectionUtils;
|
||||
* @author Christoph Strobl
|
||||
* @author Diego Diez
|
||||
* @author Jeff Sheets
|
||||
* @author Jens Schauder
|
||||
* @since 1.6
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class StoredProcedureAttributeSourceUnitTests {
|
||||
|
||||
StoredProcedureAttributeSource creator;
|
||||
@Mock JpaEntityMetadata<User> entityMetadata;
|
||||
@Mock
|
||||
JpaEntityMetadata<User> entityMetadata;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
@@ -67,9 +66,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
|
||||
StoredProcedureAttributes attr = creator.createFrom(method("plus1inout", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("plus1inout"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("plus1inout");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
@@ -78,9 +77,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator.createFrom(method("explicitlyNamedPlus1inout", Integer.class),
|
||||
entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("plus1inout"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("plus1inout");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
@@ -89,9 +88,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator.createFrom(method("explicitlyNamedPlus1inout", Integer.class),
|
||||
entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("plus1inout"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("plus1inout");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
@@ -100,9 +99,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator
|
||||
.createFrom(method("explicitPlus1inoutViaProcedureNameAlias", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("plus1inout"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("plus1inout");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-1297
|
||||
@@ -111,9 +110,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator.createFrom(
|
||||
method("explicitPlus1inoutViaProcedureNameAliasAndOutputParameterName", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("plus1inout"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is("res"));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("plus1inout");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo("res");
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
@@ -122,9 +121,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator
|
||||
.createFrom(method("entityAnnotatedCustomNamedProcedurePlus1IO", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("User.plus1IO"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is("res"));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("User.plus1IO");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo("res");
|
||||
}
|
||||
|
||||
@Test // DATAJPA-707
|
||||
@@ -133,9 +132,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator
|
||||
.createFrom(method("entityAnnotatedCustomNamedProcedureOutputParamNamePlus1IO", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("User.plus1IO"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is("override"));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("User.plus1IO");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo("override");
|
||||
}
|
||||
|
||||
@Test // DATAJPA-707
|
||||
@@ -144,11 +143,11 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator
|
||||
.createFrom(method("entityAnnotatedCustomNamedProcedurePlus1IO2", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("User.plus1IO2"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is("res"));
|
||||
assertThat(attr.getOutputParameterTypes().get(1), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(1), is("res2"));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("User.plus1IO2");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo("res");
|
||||
assertThat(attr.getOutputParameterTypes().get(1)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(1)).isEqualTo("res2");
|
||||
}
|
||||
|
||||
@Test // DATAJPA-455
|
||||
@@ -156,9 +155,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
|
||||
StoredProcedureAttributes attr = creator.createFrom(method("plus1", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is("User.plus1"));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is("res"));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("User.plus1");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo("res");
|
||||
}
|
||||
|
||||
@Test // DATAJPA-871
|
||||
@@ -167,9 +166,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator
|
||||
.createFrom(method("plus1inoutWithComposedAnnotationOverridingProcedureName", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is(equalTo("plus1inout")));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("plus1inout");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo(StoredProcedureAttributes.SYNTHETIC_OUTPUT_PARAMETER_NAME);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-871
|
||||
@@ -178,9 +177,9 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
StoredProcedureAttributes attr = creator
|
||||
.createFrom(method("plus1inoutWithComposedAnnotationOverridingName", Integer.class), entityMetadata);
|
||||
|
||||
assertThat(attr.getProcedureName(), is(equalTo("User.plus1")));
|
||||
assertThat(attr.getOutputParameterTypes().get(0), is(typeCompatibleWith(Integer.class)));
|
||||
assertThat(attr.getOutputParameterNames().get(0), is(equalTo("res")));
|
||||
assertThat(attr.getProcedureName()).isEqualTo("User.plus1");
|
||||
assertThat(attr.getOutputParameterTypes().get(0)).isEqualTo(Integer.class);
|
||||
assertThat(attr.getOutputParameterNames().get(0)).isEqualTo("res");
|
||||
}
|
||||
|
||||
private static Method method(String name, Class<?>... paramTypes) {
|
||||
@@ -196,51 +195,59 @@ public class StoredProcedureAttributeSourceUnitTests {
|
||||
/**
|
||||
* Explicitly mapped to a procedure with name "plus1inout" in database.
|
||||
*/
|
||||
@Procedure("plus1inout") // DATAJPA-455
|
||||
@Procedure("plus1inout")
|
||||
// DATAJPA-455
|
||||
Integer explicitlyNamedPlus1inout(Integer arg);
|
||||
|
||||
/**
|
||||
* Explicitly mapped to a procedure with name "plus1inout" in database via alias.
|
||||
*/
|
||||
@Procedure(procedureName = "plus1inout") // DATAJPA-455
|
||||
@Procedure(procedureName = "plus1inout")
|
||||
// DATAJPA-455
|
||||
Integer explicitPlus1inoutViaProcedureNameAlias(Integer arg);
|
||||
|
||||
/**
|
||||
* Explicitly mapped to a procedure with name "plus1inout" in database via alias and explicitly named ouput
|
||||
* parameter.
|
||||
*/
|
||||
@Procedure(procedureName = "plus1inout", outputParameterName = "res") // DATAJPA-1297
|
||||
@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
|
||||
@Procedure
|
||||
// DATAJPA-455
|
||||
Integer plus1inout(Integer arg);
|
||||
|
||||
/**
|
||||
* Explicitly mapped to named stored procedure "User.plus1IO" in {@link EntityManager}.
|
||||
*/
|
||||
@Procedure(name = "User.plus1IO") // DATAJPA-455
|
||||
@Procedure(name = "User.plus1IO")
|
||||
// DATAJPA-455
|
||||
Integer entityAnnotatedCustomNamedProcedurePlus1IO(@Param("arg") Integer arg);
|
||||
|
||||
/**
|
||||
* Explicitly mapped to named stored procedure "User.plus1IO" in {@link EntityManager}.
|
||||
* With a outputParameterName
|
||||
*/
|
||||
@Procedure(name = "User.plus1IO", outputParameterName = "override") // DATAJPA-707
|
||||
@Procedure(name = "User.plus1IO", outputParameterName = "override")
|
||||
// DATAJPA-707
|
||||
Integer entityAnnotatedCustomNamedProcedureOutputParamNamePlus1IO(@Param("arg") Integer arg);
|
||||
|
||||
/**
|
||||
* Explicitly mapped to named stored procedure "User.plus1IO2" in {@link EntityManager}.
|
||||
*/
|
||||
@Procedure(name = "User.plus1IO2") // DATAJPA-707
|
||||
@Procedure(name = "User.plus1IO2")
|
||||
// DATAJPA-707
|
||||
Map<String, Integer> entityAnnotatedCustomNamedProcedurePlus1IO2(@Param("arg") Integer arg);
|
||||
|
||||
/**
|
||||
* Implicitly mapped to named stored procedure "User.plus1" in {@link EntityManager}.
|
||||
*/
|
||||
@Procedure // DATAJPA-455
|
||||
@Procedure
|
||||
// DATAJPA-455
|
||||
Integer plus1(@Param("arg") Integer arg);
|
||||
|
||||
@ComposedProcedureUsingAliasFor(explicitProcedureName = "plus1inout")
|
||||
|
||||
@@ -31,7 +31,7 @@ public class StoredProcedureAttributesUnitTests {
|
||||
@Test // DATAJPA-681
|
||||
public void usesSyntheticOutputParameterNameForAdhocProcedureWithoutOutputName() {
|
||||
|
||||
StoredProcedureAttributes attributes = new StoredProcedureAttributes("procedure", null, Long.class, false);
|
||||
StoredProcedureAttributes attributes = new StoredProcedureAttributes("procedure", null, Long.class);
|
||||
assertThat(attributes.getOutputParameterNames().get(0), is(SYNTHETIC_OUTPUT_PARAMETER_NAME));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -348,7 +348,7 @@ public interface UserRepository
|
||||
|
||||
/**
|
||||
* Explicitly mapped to named stored procedure "User.plus1IO2" in {@link EntityManager}.
|
||||
* Returns 2 out params as a List
|
||||
* Returns 2 out params as a Map.
|
||||
*/
|
||||
@Procedure(name = "User.plus1IO2") // DATAJPA-707
|
||||
Map<String, Integer> entityAnnotatedCustomNamedProcedurePlus1IO2(@Param("arg") Integer arg);
|
||||
|
||||
Reference in New Issue
Block a user