diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/QueryResultGraphRepositoryQuery.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/QueryResultGraphRepositoryQuery.java
index 2c25ecfab..246a1a6d9 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/QueryResultGraphRepositoryQuery.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/QueryResultGraphRepositoryQuery.java
@@ -29,7 +29,7 @@ import org.neo4j.ogm.session.result.RowModel;
import org.neo4j.ogm.session.transaction.Transaction;
/**
- * Specialisation of {@link GraphRepositoryQuery} that handles mapping to object annotated with @QueryResult.
+ * Specialisation of {@link GraphRepositoryQuery} that handles mapping to objects annotated with @QueryResult.
*
* @author Adam George
*/
diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/derived/CypherFinderQuery.java b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/derived/CypherFinderQuery.java
index 004156374..f3a947980 100644
--- a/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/derived/CypherFinderQuery.java
+++ b/spring-data-neo4j/src/main/java/org/springframework/data/neo4j/repository/query/derived/CypherFinderQuery.java
@@ -52,6 +52,7 @@ public class CypherFinderQuery implements DerivedQueryDefinition {
parameter.setPropertyName(property);
parameter.setOwnerEntityType(entityType);
parameter.setComparisonOperator(convertToComparisonOperator(part.getType()));
+ parameter.setNegated(part.getType().name().startsWith("NOT"));
parameter.setBooleanOperator(booleanOperator);
if (part.getProperty().next() != null) {
@@ -74,6 +75,8 @@ public class CypherFinderQuery implements DerivedQueryDefinition {
return ComparisonOperator.MATCHES;
case LIKE:
return ComparisonOperator.LIKE;
+ case NOT_LIKE:
+ return ComparisonOperator.LIKE;
default:
return ComparisonOperator.EQUALS;
}
diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java
index 0371acdac..208fa79a6 100644
--- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java
+++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/examples/movies/repo/UserRepository.java
@@ -83,10 +83,12 @@ public interface UserRepository extends GraphRepository {
@Query("MATCH (user:User) WHERE ID(user)={userId} RETURN user")
User loadUserByNamedId(@Param("userId") User user);
-
@Query("MATCH (user:User) RETURN user")
Iterable getAllUsersIterable();
@Query("MATCH (user:User) set user.name={0}")
void setNamesNull(String name);
+
+ List findByNameIsNotLike(String name);
+
}
diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/queries/DerivedQueryTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/queries/DerivedQueryTest.java
index f4c7c2be7..e9fae674b 100644
--- a/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/queries/DerivedQueryTest.java
+++ b/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/queries/DerivedQueryTest.java
@@ -382,5 +382,31 @@ public class DerivedQueryTest {
assertEquals("The wrong number of cinemas was returned", 2, cinemas.size());
}
+ /**
+ * DATAGRAPH-761
+ */
+ @Test
+ public void shouldMatchNodeEntitiesUsingLikeWithWildcardsAndSpecialCharacters() {
+ executeUpdate("CREATE (:Theatre {name:'IMAX', city:'Kolkata (Calcutta)'}), "
+ + "(:Theatre {name:'PVR', city:'Bengaluru (Bangalore)'}), "
+ + "(:Theatre {name:'Metro Big Cinema', city:'Mumbai (Bombay)'}) ");
+
+ List indianCinemas = cinemaRepository.findByLocationLike("*(B*");
+ assertEquals("The wrong number of cinemas was returned", 2, indianCinemas.size());
+ }
+
+ /**
+ * DATAGRAPH-761
+ */
+ @Test
+ public void shouldMatchNodeEntitiesUsingNotLikeWithAsteriskWildcards() {
+ executeUpdate("CREATE (:User {name:'Jeff'}), "
+ + "(:User {name:'Jeremy'}), "
+ + "(:User {name:'Alan'})");
+
+ List nonMatchingUsers = userRepository.findByNameIsNotLike("Je*");
+ assertEquals("The wrong number of users was returned", 1, nonMatchingUsers.size());
+ assertEquals("The wrong user was returned", "Alan", nonMatchingUsers.get(0).getName());
+ }
}