DATAJPA-564 - More robust handling of SpEL expressions in String queries.
We now treat the result of the SpEL expression evaluation as Object instead of just String in ExpressionAwareParameterBinder. We now prefer index based parameter binding over named parameter binding iff only SpEL expression parameters are present. We now make named parameters available as variables in SpEL expressions.
This commit is contained in:
committed by
Oliver Gierke
parent
a94a807bb3
commit
b09588f922
@@ -1617,6 +1617,58 @@ public class UserRepositoryTests {
|
||||
assertThat(users.get(0), is(firstUser));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
@Test
|
||||
public void shouldFindBySpELExpressionWithoutArgumentsWithQuestionmark() {
|
||||
|
||||
flushTestUsers();
|
||||
List<User> users = repository.findOliverBySpELExpressionWithoutArgumentsWithQuestionmark();
|
||||
|
||||
assertThat(users, hasSize(1));
|
||||
assertThat(users.get(0), is(firstUser));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
@Test
|
||||
public void shouldFindBySpELExpressionWithoutArgumentsWithColon() {
|
||||
|
||||
flushTestUsers();
|
||||
List<User> users = repository.findOliverBySpELExpressionWithoutArgumentsWithColon();
|
||||
|
||||
assertThat(users, hasSize(1));
|
||||
assertThat(users.get(0), is(firstUser));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
@Test
|
||||
public void shouldFindUsersByAgeForSpELExpression() {
|
||||
|
||||
flushTestUsers();
|
||||
List<User> users = repository.findUsersByAgeForSpELExpressionByIndexedParameter(35);
|
||||
|
||||
assertThat(users, hasSize(1));
|
||||
assertThat(users.get(0), is(secondUser));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
@Test
|
||||
public void shouldfindUsersByFirstnameForSpELExpressionWithParameterNameVariableReference() {
|
||||
|
||||
flushTestUsers();
|
||||
List<User> users = repository.findUsersByFirstnameForSpELExpression("Joachim");
|
||||
|
||||
assertThat(users, hasSize(1));
|
||||
assertThat(users.get(0), is(secondUser));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
|
||||
@@ -477,4 +477,28 @@ public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecifi
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
List<User> queryByLastname(Expression lastname);
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
@Query("select u from User u where u.firstname = ?#{'Oliver'}")
|
||||
List<User> findOliverBySpELExpressionWithoutArgumentsWithQuestionmark();
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
@Query("select u from User u where u.firstname = :#{'Oliver'}")
|
||||
List<User> findOliverBySpELExpressionWithoutArgumentsWithColon();
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
@Query("select u from User u where u.age = ?#{[0]}")
|
||||
List<User> findUsersByAgeForSpELExpressionByIndexedParameter(int age);
|
||||
|
||||
/**
|
||||
* @see DATAJPA-XXX
|
||||
*/
|
||||
@Query("select u from User u where u.firstname = :firstname and u.firstname = :#{#firstname}")
|
||||
List<User> findUsersByFirstnameForSpELExpression(@Param("firstname") String firstname);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user