Make SpEL behavior consistent.

See #1597
This commit is contained in:
Greg L. Turnquist
2023-07-26 15:13:22 -05:00
parent 0e2e5ffaa4
commit a217fc4eeb
2 changed files with 29 additions and 1 deletions

View File

@@ -37,6 +37,7 @@ import org.springframework.util.Assert;
* @author Tom Hombergs
* @author Michael J. Simons
* @author Diego Krupitza
* @author Greg Turnquist
*/
class ExpressionBasedStringQuery extends StringQuery {
@@ -48,7 +49,7 @@ class ExpressionBasedStringQuery extends StringQuery {
private static final String ENTITY_NAME = "entityName";
private static final String ENTITY_NAME_VARIABLE = "#" + ENTITY_NAME;
private static final String ENTITY_NAME_VARIABLE_EXPRESSION = "#{" + ENTITY_NAME_VARIABLE + "}";
private static final String ENTITY_NAME_VARIABLE_EXPRESSION = "#{" + ENTITY_NAME_VARIABLE;
/**
* Creates a new {@link ExpressionBasedStringQuery} for the given query and {@link EntityMetadata}.

View File

@@ -40,6 +40,7 @@ import org.springframework.expression.spel.standard.SpelExpressionParser;
* @author Mark Paluch
* @author Michael J. Simons
* @author Diego Krupitza
* @author Greg Turnquist
*/
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
@@ -174,4 +175,30 @@ class ExpressionBasedStringQueryUnitTests {
assertThat(binding.getType()).isEqualTo(Type.STARTING_WITH);
}
@Test
public void doesTemplatingWhenEntityNameSpelIsPresent() {
StringQuery query = new ExpressionBasedStringQuery("select #{#entityName + 'Hallo'} from #{#entityName} u",
metadata, SPEL_PARSER, false);
assertThat(query.getQueryString()).isEqualTo("select UserHallo from User u");
}
@Test
public void doesNoTemplatingWhenEntityNameSpelIsNotPresent() {
StringQuery query = new ExpressionBasedStringQuery("select #{#entityName + 'Hallo'} from User u", metadata,
SPEL_PARSER, false);
assertThat(query.getQueryString()).isEqualTo("select UserHallo from User u");
}
@Test
public void doesTemplatingWhenEntityNameSpelIsPresentForBindParameter() {
StringQuery query = new ExpressionBasedStringQuery("select u from #{#entityName} u where name = :#{#something}",
metadata, SPEL_PARSER, false);
assertThat(query.getQueryString()).isEqualTo("select u from User u where name = :__$synthetic$__1");
}
}