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()); }