From df55a8525d4d139aa01665a85c46c1bdd842109b Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Sun, 27 Oct 2013 17:24:19 +0100 Subject: [PATCH] DATAJPA-405 - Guard against null predicates on query creation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now only call CriteriaQuery.where(…) if the predicate we handle is a non-null value. Adapted Jpa(Count)QueryCreator accordingly. --- pom.xml | 6 +++--- .../jpa/repository/query/JpaCountQueryCreator.java | 4 +++- .../data/jpa/repository/query/JpaQueryCreator.java | 4 +++- .../data/jpa/repository/UserRepositoryTests.java | 14 ++++++++++++++ .../data/jpa/repository/sample/UserRepository.java | 7 ++++++- 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 2439018f1..9952d69a4 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ 1.8.0.10 2.0.0 2.2.1 - 1.6.2.RELEASE + 1.6.3.BUILD-SNAPSHOT @@ -416,8 +416,8 @@ - spring-libs-release - http://repo.springsource.org/libs-release-local + spring-libs-snapshot + http://repo.springsource.org/libs-snapshot-local diff --git a/src/main/java/org/springframework/data/jpa/repository/query/JpaCountQueryCreator.java b/src/main/java/org/springframework/data/jpa/repository/query/JpaCountQueryCreator.java index baf3a2a12..d7761494b 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/JpaCountQueryCreator.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/JpaCountQueryCreator.java @@ -50,6 +50,8 @@ public class JpaCountQueryCreator extends JpaQueryCreator { @Override protected CriteriaQuery complete(Predicate predicate, Sort sort, CriteriaQuery query, CriteriaBuilder builder, Root root) { - return query.select(builder.count(root)).where(predicate); + + CriteriaQuery select = query.select(builder.count(root)); + return predicate == null ? select : select.where(predicate); } } 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 0642b621f..c6f21d25c 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 @@ -129,7 +129,9 @@ public class JpaQueryCreator extends AbstractQueryCreator, */ protected CriteriaQuery complete(Predicate predicate, Sort sort, CriteriaQuery query, CriteriaBuilder builder, Root root) { - return this.query.select(root).where(predicate).orderBy(QueryUtils.toOrders(sort, root, builder)); + + CriteriaQuery select = this.query.select(root).orderBy(QueryUtils.toOrders(sort, root, builder)); + return predicate == null ? select : select.where(predicate); } /** 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 9b296ea49..dde7a5828 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -1093,6 +1093,20 @@ public class UserRepositoryTests { assertThat(lastname, hasItem("Dave")); } + /** + * @see DATAJPA-405 + */ + @Test + public void executesFinderWithOrderClauseOnly() { + + flushTestUsers(); + + List result = repository.findAllByOrderByLastnameAsc(); + + assertThat(result, hasSize(4)); + assertThat(result, contains(secondUser, firstUser, thirdUser, fourthUser)); + } + 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 a61395799..77a0e3075 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 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2012 the original author or authors. + * Copyright 2008-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -270,4 +270,9 @@ public interface UserRepository extends JpaRepository, JpaSpecifi */ @Query("select u.firstname from User u where u.lastname = ?1") List findFirstnamesByLastname(String lastname); + + /** + * @see DATAJPA-405 + */ + List findAllByOrderByLastnameAsc(); }