From 94cd34203802a3ed415456f8996a66648bc785cd Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Sun, 14 Jun 2015 11:55:52 +0200 Subject: [PATCH] DATAJPA-736 - Added support for non-ASCII characters in entity names. We now use an improved regular expression to detect identifier clauses in JPQL queries to be able to derive count queries for queries that use non-ASCII characters in entity names. --- .../data/jpa/repository/query/QueryUtils.java | 2 +- .../data/jpa/repository/query/QueryUtilsUnitTests.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java b/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java index c1c7f6423..50346287b 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java @@ -80,7 +80,7 @@ public abstract class QueryUtils { private static final Pattern ALIAS_MATCH; private static final Pattern COUNT_MATCH; - private static final String IDENTIFIER = "[\\p{Alnum}._$]+"; + private static final String IDENTIFIER = "[\\p{Lu}\\P{InBASIC_LATIN}\\p{Alnum}._$]+"; private static final String IDENTIFIER_GROUP = String.format("(%s)", IDENTIFIER); private static final String JOIN = "join " + IDENTIFIER + " (as )?" + IDENTIFIER_GROUP; diff --git a/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java index fbcc24158..b5f5ea15e 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java @@ -295,6 +295,14 @@ public class QueryUtilsUnitTests { assertThat(applySorting(query, sort, "c"), endsWith("order by p.lineItems asc")); } + /** + * @see DATAJPA-736 + */ + @Test + public void supportsNonAsciiCharactersInEntityNames() { + assertThat(createCountQueryFor("select u from Usèr u"), is("select count(u) from Usèr u")); + } + private void assertCountQuery(String originalQuery, String countQuery) { assertThat(createCountQueryFor(originalQuery), is(countQuery)); }