From 37aabff481973a182b39204cf26cd23ac78daf82 Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Mon, 26 Jun 2017 20:39:32 +0200 Subject: [PATCH] DATAJPA-1140 - Added test for reproducing the issue. Tests added to reproduce failure of parameter binding when a mixture of SpEL expressions and normal parameters is used. Original pull request: #205, #206. --- .../jpa/repository/UserRepositoryTests.java | 42 +++++++++++++++++++ .../jpa/repository/sample/UserRepository.java | 17 ++++++++ 2 files changed, 59 insertions(+) diff --git a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index c9080f8e4..2a232cf22 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -88,6 +88,7 @@ import com.google.common.base.Optional; * @author Thomas Darimont * @author Christoph Strobl * @author Mark Paluch + * @author Kevin Peters */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:application-context.xml") @@ -1540,6 +1541,47 @@ public class UserRepositoryTests { assertThat(users.getContent()).hasSize(2).containsExactly(thirdUser, fourthUser); } + + @Test // DATAJPA-1140 + public void shouldFindUsersByUserFirstnameAsSpELExpressionAndLastnameAsStringInStringBasedQuery() { + + flushTestUsers(); + + List users = repository.findUsersByUserFirstnameAsSpELExpressionAndLastnameAsString(firstUser, firstUser.getLastname()); + + assertThat(users).containsOnly(firstUser); + } + + @Test // DATAJPA-1140 + public void shouldFindUsersByFirstnameAsStringAndUserLastnameAsSpELExpressionInStringBasedQuery() { + + flushTestUsers(); + + List users = repository.findUsersByFirstnameAsStringAndUserLastnameAsSpELExpression(firstUser.getFirstname(), firstUser); + + assertThat(users).containsOnly(firstUser); + } + + + @Test // DATAJPA-1140 + public void shouldFindUsersByUserFirstnameAsSpELExpressionAndLastnameAsFakeSpELExpressionInStringBasedQuery() { + + flushTestUsers(); + + List users = repository.findUsersByUserFirstnameAsSpELExpressionAndLastnameAsFakeSpELExpression(firstUser, firstUser.getLastname()); + + assertThat(users).containsOnly(firstUser); + } + + @Test // DATAJPA-1140 + public void shouldFindUsersByFirstnameAsFakeSpELExpressionAndUserLastnameAsSpELExpressionInStringBasedQuery() { + + flushTestUsers(); + + List users = repository.findUsersByFirstnameAsFakeSpELExpressionAndUserLastnameAsSpELExpression(firstUser.getFirstname(), firstUser); + + assertThat(users).containsOnly(firstUser); + } @Test // DATAJPA-629 public void shouldfindUsersBySpELExpressionParametersWithSpelTemplateExpression() { diff --git a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java index 815a7d51a..326050bd6 100644 --- a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java +++ b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java @@ -48,6 +48,7 @@ import com.google.common.base.Optional; * * @author Oliver Gierke * @author Thomas Darimont + * @author Kevin Peters */ public interface UserRepository extends JpaRepository, JpaSpecificationExecutor, UserRepositoryCustom { @@ -429,6 +430,22 @@ public interface UserRepository value = "select * from (select rownum() as RN, u.* from SD_User u) where RN between ?#{ #pageable.offset -1} and ?#{#pageable.offset + #pageable.pageSize}", countQuery = "select count(u.id) from SD_User u", nativeQuery = true) Page findUsersInNativeQueryWithPagination(Pageable pageable); + + // DATAJPA-1140 + @Query("select u from User u where u.firstname =:#{#user.firstname} and u.lastname =:lastname") + List findUsersByUserFirstnameAsSpELExpressionAndLastnameAsString(@Param("user") User user, @Param("lastname") String lastname); + + // DATAJPA-1140 + @Query("select u from User u where u.firstname =:firstname and u.lastname =:#{#user.lastname}") + List findUsersByFirstnameAsStringAndUserLastnameAsSpELExpression(@Param("firstname") String firstname, @Param("user") User user); + + // DATAJPA-1140 + @Query("select u from User u where u.firstname =:#{#user.firstname} and u.lastname =:#{#lastname}") + List findUsersByUserFirstnameAsSpELExpressionAndLastnameAsFakeSpELExpression(@Param("user") User user, @Param("lastname") String lastname); + + // DATAJPA-1140 + @Query("select u from User u where u.firstname =:#{#firstname} and u.lastname =:#{#user.lastname}") + List findUsersByFirstnameAsFakeSpELExpressionAndUserLastnameAsSpELExpression(@Param("firstname") String firstname, @Param("user") User user); // DATAJPA-629 @Query("select u from #{#entityName} u where u.firstname = ?#{[0]} and u.lastname = ?#{[1]}")