DATAJPA-1115 - Adapt to QuerydslPredicateExecutor API changes.
We now return Optional<T> for findOne(Predicate). Original pull request: #202. Related ticket: DATACMNS-1059.
This commit is contained in:
committed by
Oliver Gierke
parent
be5946d55a
commit
86852846f3
@@ -18,10 +18,13 @@ package org.springframework.data.jpa.repository.support;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.LockModeType;
|
||||
|
||||
import com.querydsl.core.NonUniqueResultException;
|
||||
import org.springframework.dao.IncorrectResultSizeDataAccessException;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
@@ -94,8 +97,13 @@ public class QuerydslJpaRepository<T, ID extends Serializable> extends SimpleJpa
|
||||
* @see org.springframework.data.querydsl.QuerydslPredicateExecutor#findOne(com.mysema.query.types.Predicate)
|
||||
*/
|
||||
@Override
|
||||
public T findOne(Predicate predicate) {
|
||||
return createQuery(predicate).select(path).fetchOne();
|
||||
public Optional<T> findOne(Predicate predicate) {
|
||||
|
||||
try {
|
||||
return Optional.ofNullable(createQuery(predicate).select(path).fetchOne());
|
||||
} catch (NonUniqueResultException ex) {
|
||||
throw new IncorrectResultSizeDataAccessException(ex.getMessage(), 1, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -59,7 +59,7 @@ public interface RoleRepository extends CrudRepository<Role, Integer>, QuerydslP
|
||||
@Override
|
||||
@Lock(LockModeType.READ)
|
||||
@QueryHints(@QueryHint(name = "foo", value = "bar"))
|
||||
Role findOne(Predicate predicate);
|
||||
Optional<Role> findOne(Predicate predicate);
|
||||
|
||||
// DATAJPA-509
|
||||
long countByName(String name);
|
||||
|
||||
@@ -23,10 +23,12 @@ import java.util.List;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.PersistenceContext;
|
||||
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.dao.IncorrectResultSizeDataAccessException;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
@@ -54,6 +56,7 @@ import com.querydsl.core.types.dsl.PathBuilderFactory;
|
||||
* @author Oliver Gierke
|
||||
* @author Thomas Darimont
|
||||
* @author Mark Paluch
|
||||
* @author Christoph Strobl
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration({ "classpath:infrastructure.xml" })
|
||||
@@ -336,4 +339,19 @@ public class QuerydslJpaRepositoryTests {
|
||||
assertThat(secondPage.getContent(), hasSize(0));
|
||||
assertThat(secondPage.getTotalElements(), is(3L));
|
||||
}
|
||||
|
||||
@Test // DATAJPA-1115
|
||||
public void findOneWithPredicateReturnsResultCorrectly() {
|
||||
Assertions.assertThat(repository.findOne(user.eq(dave))).contains(dave);
|
||||
}
|
||||
|
||||
@Test // DATAJPA-1115
|
||||
public void findOneWithPredicateReturnsOptionalEmptyWhenNoDataFound() {
|
||||
Assertions.assertThat(repository.findOne(user.firstname.eq("batman"))).isNotPresent();
|
||||
}
|
||||
|
||||
@Test(expected = IncorrectResultSizeDataAccessException.class) // DATAJPA-1115
|
||||
public void findOneWithPredicateThrowsExceptionForNonUniqueResults() {
|
||||
repository.findOne(user.emailAddress.contains("com"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user