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

냠냠이님의 프로필 이미지
냠냠이

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

JpaRepository 여러 entity에서 사용 시

작성

·

862

0

JpaRepository 여러 entity에서 사용 시에 각각 마다 레포 생성해야 되나여?

아래와 같은 경우요

public interface BoardFileRepository extends JpaRepository<BoardFile,Long> {
}

public interface BoardRepository extends JpaRepository<Board,Long>, BoardRepositoryCustom {

@QueryHints({
@QueryHint(name = org.hibernate.annotations.QueryHints.COMMENT, value = "BoardRepository.findByName")
})
Board findByName(String name);

}

 

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

JpaRepository는 Entity 클래스를 기준으로 생성되기 때문에, 여러 개의 Entity 클래스를 다루어야 한다면 각각의 Repository 인터페이스를 생성해야 합니다. 그래서 Board와 BoardFile Entity 클래스들에 대해 JpaRepository를 각각 생성한 것 같습니다.

하지만, 비슷한 동작을 하는 Entity 클래스들이 많다면 일일이 Repository를 모두 생성하면 반복적인 코드가 많아지고 복잡해질수도 있습니다. 그렇다면 이런 경우에는 공통으로 사용될 수 있는 Repository 메서드를 갖는 베이스 Repository 인터페이스를 만들어서 이를 다른 Repository 인터페이스가 상속 받는 방법이 있습니다. 이를 통해 코드의 반복을 줄일 수 있습니다.

예를 들어, 여러 Entity 클래스가 Create, Read, Update, Delete(CRUD) 기능을 함께 사용하는 경우, JpaRepository 대신에 Spring Data JPA에서 제공하는 CrudRepository 인터페이스를 상속 받아서 베이스 Repository 인터페이스를 만들고, 다른 Entity 클래스의 Repository 클래스는 이를 상속 받아서 사용할 수 있습니다.

그러나, JpaRepository는 CrudRepository를 상속받기 때문에, 이미 JpaRepository를 상속받은 상태에서 베이스 Repository 인터페이스를 추가로 정의하는 것은 불필요할 것 같습니다.

요약하자면, Entity 클래스가 많다면 JpaRepository를 상속받은 Repository 인터페이스를 각각 만들어 사용하는 것이 가장 효율적이며, 반복적인 코드를 줄이기 위해서는 공통적으로 사용할 수 있는 메서드를 갖는 베이스 Repository 인터페이스를 만들어 상속 관계를 이용하는 방법이 있습니다.

더 자세한 사항은 Spring Data JPA Reference 문서를 참고하시면 도움이 될 것입니다. 감사합니다.

냠냠이님의 프로필 이미지
냠냠이

작성한 질문수

질문하기