Hello

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);

 


참고링크

https://docs.spring.io/spring-data/jpa/docs/2.3.0.RELEASE/reference/html/#repository-query-return-types

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기