From 98668b371c9730a6e5fead3fa628b847fd1ea573 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Sun, 4 Sep 2011 15:04:06 +0200 Subject: [PATCH] DATAJPA-96 - JpaQueryCreator now correctly resolves nested properties for all supported keywords. Removed Part.toDotPath() references to create Expressions as they have to be atomic. --- .../data/jpa/repository/query/JpaQueryCreator.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java b/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java index 4522acb1f..507663265 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java @@ -168,7 +168,7 @@ public class JpaQueryCreator extends AbstractQueryCreator, case BETWEEN: ParameterExpression first = provider.next(); ParameterExpression second = provider.next(); - return builder.between(root. get(part.getProperty().toDotPath()), first, second); + return builder.between(getComparablePath(root, part), first, second); case GREATER_THAN: return builder.greaterThan(getComparablePath(root, part), provider.next(Comparable.class)); case LESS_THAN: @@ -182,9 +182,9 @@ public class JpaQueryCreator extends AbstractQueryCreator, case IN: return path.in(provider.next(Collection.class)); case LIKE: - return builder.like(root. get(part.getProperty().toDotPath()), provider.next(String.class)); + return builder.like(getTypedPath(root, part, String.class), provider.next(String.class)); case NOT_LIKE: - return builder.like(root. get(part.getProperty().toDotPath()), provider.next(String.class)).not(); + return builder.like(getTypedPath(root, part, String.class), provider.next(String.class)).not(); case SIMPLE_PROPERTY: return builder.equal(path, provider.next()); case NEGATING_SIMPLE_PROPERTY: @@ -221,7 +221,10 @@ public class JpaQueryCreator extends AbstractQueryCreator, */ @SuppressWarnings({ "rawtypes" }) private Expression getComparablePath(Root root, Part part) { + return getTypedPath(root, part, Comparable.class); + } + private Expression getTypedPath(Root root, Part part, Class type) { return toExpressionRecursively(root, part.getProperty()); }