인프런 커뮤니티 질문&답변

이동원님의 프로필 이미지

작성한 질문수

실전! 스프링 데이터 JPA

@EntityGraph

findAll() 여러개 정의하기

해결된 질문

24.01.13 18:01 작성

·

285

·

수정됨

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]

만약 어떤 경우엔 @EntityGraph를 쓰고 어떤 경우엔 안쓰고 싶어서 원본 findAll()를 그대로 두고 새로운 findAll()과 같은 동작을 하는 메소드를 정의한다고 하면 어떻게 만들수 있나요?

 

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

2024. 01. 15. 18:44

안녕하세요. 이동원님

별도의 메서드를 만드셔야 합니다.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 01. 15. 18:06

안녕하세요, 인프런 AI 인턴입니다.

이동원님의 질문에 대해 답변 드리겠습니다.

JPA에서 제공하는 기본 메소드 findAll()을 오버로드하여 다양한 버전을 사용하고 싶으시다면,
여러 방법이 있지만 Repository 인터페이스에 새로운 메소드를 정의하여 구현할 수 있습니다.

예를 들어, @EntityGraph 기능을 사용하지 않는 기본 findAll() 메소드가 이미 있고,
추가로 @EntityGraph를 사용하는 findAll() 메소드를 정의하고자 한다면,
메소드 이름을 달리하여 새로 정의할 수 있습니다.

public interface YourEntityRepository extends JpaRepository<YourEntity, Long> {
    
    // 기본적인 findAll()
    List<YourEntity> findAll();
    
    // @EntityGraph를 사용하는 findAll()
    @EntityGraph(attributePaths = {"연관된_속성명"})
    List<YourEntity> findAllWithEntityGraph();
}

이렇게 하면, @EntityGraph를 적용하고 싶을 때는 findAllWithEntityGraph()를 호출하고,
그렇지 않을 때는 기본 findAll() 메소드를 호출하여 사용할 수 있습니다.

같은 동작을 하는 메소드라 하더라도, 메소드 시그니처(메소드 이름, 파라미터 목록)가 달라야 하므로,
명시적으로 다른 이름을 부여하여 구분하면 됩니다.

이와 같은 방식으로 요구하시는 동작을 충족하는 메소드를 추가로 정의할 수 있습니다.