Skip to content

Commit a217fc4

Browse files
committed
Make SpEL behavior consistent.
See #1597
1 parent 0e2e5ff commit a217fc4

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/ExpressionBasedStringQuery.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
* @author Tom Hombergs
3838
* @author Michael J. Simons
3939
* @author Diego Krupitza
40+
* @author Greg Turnquist
4041
*/
4142
class ExpressionBasedStringQuery extends StringQuery {
4243

@@ -48,7 +49,7 @@ class ExpressionBasedStringQuery extends StringQuery {
4849

4950
private static final String ENTITY_NAME = "entityName";
5051
private static final String ENTITY_NAME_VARIABLE = "#" + ENTITY_NAME;
51-
private static final String ENTITY_NAME_VARIABLE_EXPRESSION = "#{" + ENTITY_NAME_VARIABLE + "}";
52+
private static final String ENTITY_NAME_VARIABLE_EXPRESSION = "#{" + ENTITY_NAME_VARIABLE;
5253

5354
/**
5455
* Creates a new {@link ExpressionBasedStringQuery} for the given query and {@link EntityMetadata}.

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/ExpressionBasedStringQueryUnitTests.java

+27
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
* @author Mark Paluch
4141
* @author Michael J. Simons
4242
* @author Diego Krupitza
43+
* @author Greg Turnquist
4344
*/
4445
@ExtendWith(MockitoExtension.class)
4546
@MockitoSettings(strictness = Strictness.LENIENT)
@@ -174,4 +175,30 @@ void indexedExpressionsShouldCreateLikeBindings() {
174175
assertThat(binding.getType()).isEqualTo(Type.STARTING_WITH);
175176
}
176177

178+
@Test
179+
public void doesTemplatingWhenEntityNameSpelIsPresent() {
180+
181+
StringQuery query = new ExpressionBasedStringQuery("select #{#entityName + 'Hallo'} from #{#entityName} u",
182+
metadata, SPEL_PARSER, false);
183+
184+
assertThat(query.getQueryString()).isEqualTo("select UserHallo from User u");
185+
}
186+
187+
@Test
188+
public void doesNoTemplatingWhenEntityNameSpelIsNotPresent() {
189+
190+
StringQuery query = new ExpressionBasedStringQuery("select #{#entityName + 'Hallo'} from User u", metadata,
191+
SPEL_PARSER, false);
192+
193+
assertThat(query.getQueryString()).isEqualTo("select UserHallo from User u");
194+
}
195+
196+
@Test
197+
public void doesTemplatingWhenEntityNameSpelIsPresentForBindParameter() {
198+
199+
StringQuery query = new ExpressionBasedStringQuery("select u from #{#entityName} u where name = :#{#something}",
200+
metadata, SPEL_PARSER, false);
201+
202+
assertThat(query.getQueryString()).isEqualTo("select u from User u where name = :__$synthetic$__1");
203+
}
177204
}

0 commit comments

Comments
 (0)