From ecb8cf9caf5926a3eb13662d6bbe100ca5894103 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 10 Feb 2016 18:19:32 +0100 Subject: [PATCH] DATAJPA-858 - Fixed collection contains handling for nested path traversals. Previously the first property was checked for being a collection to trigger collection contains handling. This is wrong for nested property traversals as they might end up in a String for which a like binding has to be applied then. We're now inspecting the leaf property for being a collection to trigger that special binding. --- .../data/jpa/repository/query/JpaQueryCreator.java | 2 +- .../data/jpa/repository/sample/UserRepository.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) 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 877798a54..9b0bc5dc5 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 @@ -215,7 +215,7 @@ public class JpaQueryCreator extends AbstractQueryCreator, case CONTAINING: case NOT_CONTAINING: - if (property.isCollection()) { + if (property.getLeafProperty().isCollection()) { Expression> propertyExpression = traversePath(root, property); Expression parameterExpression = provider.next(part).getExpression(); diff --git a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java index c69dd61a1..7df6fcf83 100644 --- a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java +++ b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java @@ -591,4 +591,9 @@ public interface UserRepository extends JpaRepository, JpaSpecifi * DATAJPA-829 */ List findByRolesNotContaining(Role role); + + /** + * @see DATAJPA-858 + */ + List findByRolesNameContaining(String name); }