diff --git a/src/main/java/org/springframework/data/jpa/repository/query/SpelExpressionStringQueryParameterBinder.java b/src/main/java/org/springframework/data/jpa/repository/query/SpelExpressionStringQueryParameterBinder.java index 9aff5c62a..6bd016c1d 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/SpelExpressionStringQueryParameterBinder.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/SpelExpressionStringQueryParameterBinder.java @@ -63,7 +63,8 @@ class SpelExpressionStringQueryParameterBinder extends StringQueryParameterBinde */ private T potentiallyBindExpressionParameters(T jpaQuery) { - if (jpaQuery.getParameters().isEmpty()) { + if (isJpaParameterInformationReliable(jpaQuery) && jpaQuery.getParameters().isEmpty()) { + // We can rely on the fact there are no parameters in the given query. return jpaQuery; } @@ -75,14 +76,28 @@ class SpelExpressionStringQueryParameterBinder extends StringQueryParameterBinde Object value = evaluateExpression(expr); - if (binding.getName() != null) { - jpaQuery.setParameter(binding.getName(), binding.prepare(value)); - } else { - jpaQuery.setParameter(binding.getPosition(), binding.prepare(value)); + try { + if (binding.getName() != null) { + jpaQuery.setParameter(binding.getName(), binding.prepare(value)); + } else { + jpaQuery.setParameter(binding.getPosition(), binding.prepare(value)); + } + } catch (IllegalArgumentException iae) { + /* + * Since Eclipse doesn't reliably report whether a query has parameters + * we simply try to set the parameters and ignore possible failures. + * + */ } } } return jpaQuery; } + + private boolean isJpaParameterInformationReliable(T jpaQuery) { + + String className = jpaQuery.getClass().getName(); + return className.startsWith("org.apache.openjpa") || className.startsWith("org.hibernate"); + } } diff --git a/src/test/java/org/springframework/data/jpa/repository/EclipseLinkNamespaceUserRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/EclipseLinkNamespaceUserRepositoryTests.java index abf516e75..d86e36b87 100644 --- a/src/test/java/org/springframework/data/jpa/repository/EclipseLinkNamespaceUserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/EclipseLinkNamespaceUserRepositoryTests.java @@ -74,10 +74,4 @@ public class EclipseLinkNamespaceUserRepositoryTests extends NamespaceUserReposi */ @Override public void findByElementCollectionAttribute() {} - - /** - * Temporarily ignored until issue with native queries and pagination is resolved. - */ - @Override - public void shouldFindUsersInNativeQueryWithPagination() {} } diff --git a/src/test/java/org/springframework/data/jpa/repository/OpenJpaNamespaceUserRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/OpenJpaNamespaceUserRepositoryTests.java index 6c7c82515..56974e9fc 100644 --- a/src/test/java/org/springframework/data/jpa/repository/OpenJpaNamespaceUserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/OpenJpaNamespaceUserRepositoryTests.java @@ -89,7 +89,7 @@ public class OpenJpaNamespaceUserRepositoryTests extends NamespaceUserRepository } /** - * Temporarily ignored until issue with native queries and pagination is resolved. + * Temporarily ignored until openjpa works with hsqldb 2.x. */ @Override public void shouldFindUsersInNativeQueryWithPagination() {}