• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

findAll() 여러개 정의하기

24.01.13 18:01 작성 24.01.14 07:32 수정 조회수 168

0


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

[질문 내용]

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

 

답변 2

·

답변을 작성해보세요.

1

안녕하세요. 이동원님

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

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.15

안녕하세요, 인프런 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() 메소드를 호출하여 사용할 수 있습니다.

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

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