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 6457be678..08514ecfe 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 @@ -202,12 +202,14 @@ public class JpaQueryCreator extends AbstractQueryCreator, ParameterMetadata first = provider.next(part); ParameterMetadata second = provider.next(part); return builder.between(getComparablePath(root, part), first.getExpression(), second.getExpression()); + case AFTER: case GREATER_THAN: return builder .greaterThan(getComparablePath(root, part), provider.next(part, Comparable.class).getExpression()); case GREATER_THAN_EQUAL: return builder.greaterThanOrEqualTo(getComparablePath(root, part), provider.next(part, Comparable.class) .getExpression()); + case BEFORE: case LESS_THAN: return builder.lessThan(getComparablePath(root, part), provider.next(part, Comparable.class).getExpression()); case LESS_THAN_EQUAL: 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 e3c886e50..a9022d1ac 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 @@ -15,6 +15,7 @@ */ package org.springframework.data.jpa.domain.sample; +import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -27,6 +28,8 @@ import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.NamedQuery; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; /** * Domain class representing a person emphasizing the use of {@code AbstractEntity}. No declaration of an id is @@ -38,8 +41,6 @@ import javax.persistence.NamedQuery; @NamedQuery(name = "User.findByEmailAddress", query = "SELECT u FROM User u WHERE u.emailAddress = ?1") public class User { - private static final long serialVersionUID = 8653688953355455933L; - @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @@ -47,6 +48,8 @@ public class User { private String lastname; private int age; private boolean active; + @Temporal(TemporalType.TIMESTAMP) + private Date createdAt; @Column(nullable = false, unique = true) private String emailAddress; @@ -67,6 +70,7 @@ public class User { this.roles = new HashSet(); this.colleagues = new HashSet(); + this.createdAt = new Date(); } /** @@ -270,6 +274,13 @@ public class User { this.manager = manager; } + /** + * @return the createdAt + */ + public Date getCreatedAt() { + return createdAt; + } + /* * (non-Javadoc) * 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 83fa6ecb5..8d7d7c1cb 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -77,12 +77,13 @@ public class UserRepositoryTests { Integer id; @Before - public void setUp() { + public void setUp() throws Exception { firstUser = new User("Oliver", "Gierke", "gierke@synyx.de"); firstUser.setAge(28); secondUser = new User("Joachim", "Arrasz", "arrasz@synyx.de"); secondUser.setAge(35); + Thread.sleep(10); thirdUser = new User("Dave", "Matthews", "no@email.com"); thirdUser.setAge(43); } @@ -752,6 +753,32 @@ public class UserRepositoryTests { assertThat(result, hasItem(thirdUser)); } + /** + * @see DATAJPA-188 + */ + @Test + public void executesFinderWithAfterKeywordCorrectly() { + + flushTestUsers(); + + List result = repository.findByCreatedAtAfter(secondUser.getCreatedAt()); + assertThat(result.size(), is(1)); + assertThat(result, hasItems(thirdUser)); + } + + /** + * @see DATAJPA-188 + */ + @Test + public void executesFinderWithBeforeKeywordCorrectly() { + + flushTestUsers(); + + List result = repository.findByCreatedAtBefore(thirdUser.getCreatedAt()); + assertThat(result.size(), is(2)); + assertThat(result, hasItems(firstUser, secondUser)); + } + protected 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 20bff35e6..56e35aa54 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 @@ -16,6 +16,7 @@ package org.springframework.data.jpa.repository.sample; import java.util.Collection; +import java.util.Date; import java.util.List; import javax.persistence.QueryHint; @@ -213,4 +214,14 @@ public interface UserRepository extends JpaRepository, JpaSpecifi */ // @Query("select u.colleagues from User u where u = ?1") // List findColleaguesFor(User user); + + /** + * @see DATAJPA-188 + */ + List findByCreatedAtBefore(Date date); + + /** + * @see DATAJPA-188 + */ + List findByCreatedAtAfter(Date date); } diff --git a/src/test/resources/eclipselink.xml b/src/test/resources/eclipselink.xml index 3e2e44eb5..fd81dc968 100644 --- a/src/test/resources/eclipselink.xml +++ b/src/test/resources/eclipselink.xml @@ -14,6 +14,7 @@ sa create-tables + false