From c139c68ae51ffe3359ad993ade0f59915624a1ae 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 72b2c61c0..7a17e4094 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 @@ -81,7 +81,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)); }