본문 바로가기

개발

QueryDsl에서 uniqueResult, singleResult 차이점.


  singleResult

public static <T> T singleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException

Return a single result object from the given Collection.
주어진 콜렉션에서 single result object를 반환한다.


   uniqueResult

public static <T> T uniqueResult(Collection<T> results)
                          throws IncorrectResultSizeDataAccessException
Return a unique result object from the given Collection.
주어진 콜렉션에서 unique result object를 반환한다.

They are mostly equivalent, but uniqueResult throws an Exception when more than one result row is returned. singleResult just returns the first and doesn't care whether multiple rows match.

차의점 : 대부분 같지만 unique는 하나가 아닐시 예외발생. single 은 첫번째 값만 리턴하고 얼마나 나오는지는 신경쓰지 않는다.


테스트 예시) uniqueResult를 썻는데 해당값이 여러개 나왔을때              NonUniqueResultException을 expect하는 테스트 작성.

@Test(expected = NonUniqueResultException.class)
public void testUniqueResultException() {
JPAQuery query = new JPAQuery(entityManager);
query.from().where();
query.uniqueResult();
}

(출처)
https://groups.google.com/forum/#!topic/querydsl/olRQ17sN1aA