해결된 질문
작성
·
294
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예
[질문 내용]
만약 어떤 경우엔 @EntityGraph를 쓰고 어떤 경우엔 안쓰고 싶어서 원본 findAll()를 그대로 두고 새로운 findAll()과 같은 동작을 하는 메소드를 정의한다고 하면 어떻게 만들수 있나요?
답변 2
1
0
안녕하세요, 인프런 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()
메소드를 호출하여 사용할 수 있습니다.
같은 동작을 하는 메소드라 하더라도, 메소드 시그니처(메소드 이름, 파라미터 목록)가 달라야 하므로,
명시적으로 다른 이름을 부여하여 구분하면 됩니다.
이와 같은 방식으로 요구하시는 동작을 충족하는 메소드를 추가로 정의할 수 있습니다.