JPA 반환타입
by 볼빵빵오춘기JPA 주요 반환 타입
List<T>
특정 조건에 맞는 여러 개의 엔티티를 조회할 때 사용다.
List<User> findByLastName(String lastName);
Optional<T>
특정 조건에 맞는 하나의 엔티티를 조회할 때 사용되며, 결과가 없을 경우 Optional.empty()를 반환한다.
Optional<User> findByEmail(String email);
Page<T>
페이징 처리가 된 결과를 반환할 때 사용된다.
Pageable 파라미터를 함께 사용한다.
Page<User> findByLastName(String lastName, Pageable pageable);
Slice<T>
페이징 처리를 하되, 전체 페이지 수를 고려하지 않고 다음 페이지가 있는지 여부만 확인할 때 사용된다.
Slice<User> findByLastName(String lastName, Pageable pageable);
Stream<T>
스트림으로 결과를 처리할 때 사용된다.
자원을 적절히 관리하기 위해 트랜잭션 내에서 사용해야 된다.
@Query("select u from User u") Stream<User> findAllByCustomQueryAndStream();
Iterable<T>
결과를 반복할 수 있는 컬렉션 타입으로 반환할 때 사용된다.
Iterable<User> findAll();
Set<T>
중복을 허용하지 않는 컬렉션 타입으로 반환할 때 사용된다.
Set<User> findDistinctByLastName(String lastName);
T
단일 엔티티를 반환할 때 사용된다.
결과가 없거나 여러 개일 경우 예외가 발생할 수 있다.
User findById(long id);
Map<K, V>
JPA 자체에서 지원하지는 않지만, 특정 쿼리 결과를 맵 형태로 매핑할 수 있다.
일반적으로 DTO를 사용하여 매핑한다.
@Query("select new map(u.id as id, u.name as name) from User u where u.id = :id") Map<String, Object> findUserByIdAsMap(@Param("id") Long id);
DTO
특정 쿼리 결과를 DTO(Data Transfer Object)로 매핑할 때 사용된다.
@Query("select new com.example.dto.UserDTO(u.id, u.name) from User u where u.id = :id") UserDTO findUserDTOById(@Param("id") Long id);
void
데이터의 수정, 삭제 등의 작업을 수행할 때 반환 타입으로 사용된다.
@Modifying @Query("update User u set u.status = :status where u.id = :id") void updateUserStatus(@Param("id") Long id, @Param("status") String status);
참고링크

블로그의 정보
Hello 춘기's world
볼빵빵오춘기