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.
This commit is contained in:
Oliver Gierke
2011-09-04 15:04:06 +02:00
parent ab727331cd
commit 98668b371c

View File

@@ -168,7 +168,7 @@ public class JpaQueryCreator extends AbstractQueryCreator<CriteriaQuery<Object>,
case BETWEEN:
ParameterExpression<Comparable> first = provider.next();
ParameterExpression<Comparable> second = provider.next();
return builder.between(root.<Comparable> 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<CriteriaQuery<Object>,
case IN:
return path.in(provider.next(Collection.class));
case LIKE:
return builder.like(root.<String> 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.<String> 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<CriteriaQuery<Object>,
*/
@SuppressWarnings({ "rawtypes" })
private Expression<? extends Comparable> getComparablePath(Root<?> root, Part part) {
return getTypedPath(root, part, Comparable.class);
}
private <T> Expression<T> getTypedPath(Root<?> root, Part part, Class<T> type) {
return toExpressionRecursively(root, part.getProperty());
}