From 23fd1349a331ab44eba7eacf62c144a57a4c4a6d Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 14 Feb 2011 17:54:37 +0100 Subject: [PATCH] DATAJPA-23 - Fixed query building for IsNull and IsNotNull. Use the actually accessed path instead of the root object. Added test cases to verify behaviour. --- .../jpa/repository/query/JpaQueryCreator.java | 4 +-- .../jpa/repository/UserRepositoryTests.java | 25 +++++++++++++++++++ .../jpa/repository/sample/UserRepository.java | 6 +++++ 3 files changed, 33 insertions(+), 2 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 22204709d8..591c1b7c90 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 @@ -175,9 +175,9 @@ root. get(part.getProperty().toDotPath()), return builder.lessThan(getComparablePath(root, part), nextAsComparable(iterator)); case IS_NULL: - return root.isNull(); + return path.isNull(); case IS_NOT_NULL: - return root.isNotNull(); + return path.isNotNull(); case LIKE: return builder.like(root. get(part.getProperty() .toDotPath()), iterator.next().toString()); diff --git a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index 915d0e28f0..3f8aa86120 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -759,6 +759,31 @@ public void executesFindByColleaguesLastnameCorrectly() throws Exception { } + @Test + public void executesFindByNotNullLastnameCorrectly() throws Exception { + + flushTestUsers(); + List result = repository.findByLastnameNotNull(); + + assertThat(result.size(), is(3)); + assertThat(result, hasItems(firstUser, secondUser, thirdUser)); + } + + + @Test + public void executesFindByNullLastnameCorrectly() throws Exception { + + flushTestUsers(); + User forthUser = + repository.save(new User("Foo", null, "email@address.com")); + + List result = repository.findByLastnameNull(); + + assertThat(result.size(), is(1)); + assertThat(result, hasItems(forthUser)); + } + + private Page executeSpecWithSort(Sort sort) { flushTestUsers(); 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 9ee513e93e..eb1845ce0b 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 @@ -190,4 +190,10 @@ List findByFirstnameOrLastname(@Param("lastname") String lastname, List findByColleaguesLastname(String lastname); + + + List findByLastnameNotNull(); + + + List findByLastnameNull(); }