프로그래밍/JPA

JPA의 FindBy와 FindAllBy 차이점! (+NonUnique)

승민아 2023. 11. 30. 19:15

 

게시글을 통해 해당 게시글의 댓글들을 모두 가져오는 코드가 필요했다.

 

findAllByBoard 과 findByBoard를 쓸 수 있는데

findByBoard의 결과가 둘 이상이면 어떻게 반환하는지 궁금했고.

반환값을 List가 아닌 Comment로 단일 결과를 반환하도록 했지만 findBy 결과가 여러건인 경우 어떻게 되는지 궁금증이 발생했다.

 

@Repository
public interface CommentRepository extends JpaRepository<Comment, Integer> {
    List<Comment> findAllByBoard(Board board);
    List<Comment> findByBoard(Board board);
}

 

먼저 반환값을 List로하고 findAllBy와 findBy의 차이점을 보자.

 

findAllBy의 결과

 

findBy의 결과

 

결과는 동일하다.

 

즉, findBy와 findAllBy의 반환값이 List라면 결과는 동일하다.

 

이제 findBy와 findAllBy의 반환값을 단일값으로 해보자.

결과는 단일값이 아닌 상황이다.

 

즉, Repository에는 다음과 같이 작성한다.

Comment findAllByBoard(Board board);
Comment findByBoard(Board board);

 

 

 

findByBoard의 결과

 

findAllBy의 결과

 

모두 unique한 결과를 예상했지만 NonUnique해서 예외가 터져버린다.