DATAJPA-296 - Fixed ignore case handling for Querydsl integration.

When using QuerydslPredicateExecutor the ignore case flag defined on the given Order inside a Pageable is considered correctly.
This commit is contained in:
Oliver Gierke
2013-04-25 10:54:26 +02:00
parent ace028fa2b
commit f697b2e102
2 changed files with 37 additions and 13 deletions

View File

@@ -67,15 +67,15 @@ public class Querydsl {
public JPQLQuery createQuery() {
switch (provider) {
case ECLIPSELINK:
return new JPAQuery(em, EclipseLinkTemplates.DEFAULT);
case HIBERNATE:
return new JPAQuery(em, HQLTemplates.DEFAULT);
case OPEN_JPA:
return new JPAQuery(em, OpenJPATemplates.DEFAULT);
case GENERIC_JPA:
default:
return new JPAQuery(em);
case ECLIPSELINK:
return new JPAQuery(em, EclipseLinkTemplates.DEFAULT);
case HIBERNATE:
return new JPAQuery(em, HQLTemplates.DEFAULT);
case OPEN_JPA:
return new JPAQuery(em, OpenJPATemplates.DEFAULT);
case GENERIC_JPA:
default:
return new JPAQuery(em);
}
}
@@ -136,7 +136,12 @@ public class Querydsl {
@SuppressWarnings({ "rawtypes", "unchecked" })
private OrderSpecifier<?> toOrder(Order order) {
Expression<Object> property = builder.get(order.getProperty());
Expression<?> property = builder.get(order.getProperty());
// Apply ignore case in case we have a String and ignore case ordering is requested
if (order.isIgnoreCase()) {
property = builder.getString(order.getProperty()).lower();
}
return new OrderSpecifier(order.isAscending() ? com.mysema.query.types.Order.ASC
: com.mysema.query.types.Order.DESC, property);

View File

@@ -28,7 +28,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.jpa.domain.sample.QUser;
import org.springframework.data.jpa.domain.sample.User;
import org.springframework.test.context.ContextConfiguration;
@@ -55,7 +57,7 @@ public class QueryDslJpaRepositoryTests {
QueryDslJpaRepository<User, Integer> repository;
QUser user = new QUser("user");
User dave, carter;
User dave, carter, oliver;
@Before
public void setUp() {
@@ -66,6 +68,7 @@ public class QueryDslJpaRepositoryTests {
repository = new QueryDslJpaRepository<User, Integer>(information, em);
dave = repository.save(new User("Dave", "Matthews", "dave@matthews.com"));
carter = repository.save(new User("Carter", "Beauford", "carter@beauford.com"));
oliver = repository.save(new User("Oliver", "matthews", "oliver@matthews.com"));
}
@Test
@@ -107,9 +110,25 @@ public class QueryDslJpaRepositoryTests {
assertThat(result.getContent(), hasSize(1));
assertThat(result.getContent().get(0), is(carter));
result = repository.findAll(lastnameContainsE, new PageRequest(0, 1, Direction.DESC, "lastname"));
result = repository.findAll(lastnameContainsE, new PageRequest(0, 2, Direction.DESC, "lastname"));
assertThat(result.getContent(), hasSize(1));
assertThat(result.getContent(), hasSize(2));
assertThat(result.getContent().get(0), is(oliver));
assertThat(result.getContent().get(1), is(dave));
}
/**
* @see DATAJPA-296
*/
@Test
public void appliesIgnoreCaseOrdering() {
Sort sort = new Sort(new Order(Direction.DESC, "lastname").ignoreCase(), new Order(Direction.ASC, "firstname"));
Page<User> result = repository.findAll(user.lastname.contains("e"), new PageRequest(0, 2, sort));
assertThat(result.getContent(), hasSize(2));
assertThat(result.getContent().get(0), is(dave));
assertThat(result.getContent().get(1), is(oliver));
}
}