diff --git a/src/main/java/org/springframework/data/jpa/repository/query/SimpleJpaQuery.java b/src/main/java/org/springframework/data/jpa/repository/query/SimpleJpaQuery.java index ef2b7b816..0ba422464 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/SimpleJpaQuery.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/SimpleJpaQuery.java @@ -65,7 +65,13 @@ final class SimpleJpaQuery extends AbstractJpaQuery { // Try to create a Query object already to fail fast if (!method.isNativeQuery()) { - em.createQuery(queryString); + try { + em.createQuery(queryString); + } catch (RuntimeException e) { + // Needed as there's ambiguities in how an invalid query string shall be expressed by the persistence provider + // http://java.net/projects/jpa-spec/lists/jsr338-experts/archive/2012-07/message/17 + throw e instanceof IllegalArgumentException ? e : new IllegalArgumentException(e); + } } } diff --git a/src/test/java/org/springframework/data/jpa/repository/query/JpaQueryLookupStrategyUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/query/JpaQueryLookupStrategyUnitTests.java index 6e3aebce6..b7f11a137 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/JpaQueryLookupStrategyUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/JpaQueryLookupStrategyUnitTests.java @@ -62,13 +62,14 @@ public class JpaQueryLookupStrategyUnitTests { Method method = UserRepository.class.getMethod("findByFoo", String.class); RepositoryMetadata metadata = new DefaultRepositoryMetadata(UserRepository.class); - Exception reference = new IllegalArgumentException(); + Throwable reference = new RuntimeException(); when(em.createQuery(anyString())).thenThrow(reference); try { strategy.resolveQuery(method, metadata, namedQueries); } catch (Exception e) { - assertThat(e, is(reference)); + assertThat(e, is(instanceOf(IllegalArgumentException.class))); + assertThat(e.getCause(), is(reference)); } }