diff --git a/src/docbkx/reference/jpa.xml b/src/docbkx/reference/jpa.xml
index 2b358f0fa..c23aa4460 100644
--- a/src/docbkx/reference/jpa.xml
+++ b/src/docbkx/reference/jpa.xml
@@ -271,6 +271,22 @@
… where x.age not in ?1
+
+
+ True
+
+ findByActiveTrue()
+
+ … where x.active = true
+
+
+
+ False
+
+ findByActiveFalse()
+
+ … where x.active = false
+
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 0b9919b7f..76a085965 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
@@ -176,8 +176,7 @@ public class JpaQueryCreator extends AbstractQueryCreator,
return getTypedPath(root, part, Comparable.class);
}
- private Expression extends T> getTypedPath(Root> root, Part part, Class type) {
-
+ private Expression getTypedPath(Root> root, Part part, Class type) {
return toExpressionRecursively(root, part.getProperty());
}
@@ -326,6 +325,10 @@ public class JpaQueryCreator extends AbstractQueryCreator,
Expression parameterExpression = upperIfIgnoreCase(provider.next(String.class));
Predicate like = builder.like(propertyExpression, parameterExpression);
return part.getType() == Type.LIKE ? like : like.not();
+ case TRUE:
+ return builder.isTrue(getTypedPath(root, part, Boolean.class));
+ case FALSE:
+ return builder.isFalse(getTypedPath(root, part, Boolean.class));
case SIMPLE_PROPERTY:
return builder.equal(upperIfIgnoreCase(path), upperIfIgnoreCase(provider.next()));
case NEGATING_SIMPLE_PROPERTY:
diff --git a/src/test/java/org/springframework/data/jpa/domain/sample/User.java b/src/test/java/org/springframework/data/jpa/domain/sample/User.java
index f8d54e688..e3c886e50 100644
--- a/src/test/java/org/springframework/data/jpa/domain/sample/User.java
+++ b/src/test/java/org/springframework/data/jpa/domain/sample/User.java
@@ -46,6 +46,7 @@ public class User {
private String firstname;
private String lastname;
private int age;
+ private boolean active;
@Column(nullable = false, unique = true)
private String emailAddress;
@@ -81,6 +82,7 @@ public class User {
this.firstname = firstname;
this.lastname = lastname;
this.emailAddress = emailAddress;
+ this.active = true;
}
/**
@@ -173,6 +175,20 @@ public class User {
this.emailAddress = emailAddress;
}
+ /**
+ * @param active the active to set
+ */
+ public void setActive(boolean active) {
+ this.active = active;
+ }
+
+ /**
+ * @return the active
+ */
+ public boolean isActive() {
+ return active;
+ }
+
/**
* Returns the user's roles.
*
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 bace1e149..a399d31d4 100644
--- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java
+++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java
@@ -694,6 +694,36 @@ public class UserRepositoryTests {
assertThat(result.size(), is(1));
}
+ /**
+ * @see DATAJPA-132
+ */
+ @Test
+ public void executesFinderWithTrueKeywordCorrectly() {
+
+ flushTestUsers();
+ firstUser.setActive(false);
+ repository.save(firstUser);
+
+ List result = repository.findByActiveTrue();
+ assertThat(result.size(), is(2));
+ assertThat(result, hasItems(secondUser, thirdUser));
+ }
+
+ /**
+ * @see DATAJPA-132
+ */
+ @Test
+ public void executesFinderWithFalseKeywordCorrectly() {
+
+ flushTestUsers();
+ firstUser.setActive(false);
+ repository.save(firstUser);
+
+ List result = repository.findByActiveFalse();
+ assertThat(result.size(), is(1));
+ assertThat(result, hasItem(firstUser));
+ }
+
private void flushTestUsers() {
firstUser = repository.save(firstUser);
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 d12ef9cb6..4f310f930 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
@@ -197,4 +197,14 @@ public interface UserRepository extends JpaRepository, JpaSpecifi
*/
@Query(value = "SELECT * FROM User WHERE lastname = ?1", nativeQuery = true)
List findNativeByLastname(String lastname);
+
+ /**
+ * @see DATAJPA-132
+ */
+ List findByActiveTrue();
+
+ /**
+ * @see DATAJPA-132
+ */
+ List findByActiveFalse();
}