[JPA] Custom JPA Repository

JPA 리포지토리는 인터페이스만 정의하여 사용한다. 그런데 메소드를 직접 구현해야 할 때도 있다. 그런데 리포지토리를 직접 구현해 버리면 공통 인터페이스가 제공하는 기능까지 모두 구현해야 하기 때문에 이럴때 우회할 수 있는 방법이 있다.

아래 처럼 인터페이스를 하나 작성 한다.

public interface MemberRepositoryCustom {
    public List<Member> findMemberCustom();
}

다음으로 이를 구현 한다.
그런데 여기서 주의 할 점은 클래스 이름을 리포지토리 인터페이스 이름 + Impl로 꼭 지어야 한다. 이렇게 하면 스프링 데이터 JPA가 사용자 정의 구현 클래스로 인식한다.

public class MemberRepositoryImpl implements MemberRepositoryCustom {

    @Override
    public List<Member> findMemberCustom() {
        .... // 사용자 정의 구현
    }
}

마지막으로 리포지토리 인터페이스에서 사용자 정의 인터페이스를 상속 받으면 된다.

public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
}

만약 Impl 대신 다른 이름을 붙이고 싶으면 repository-impl-postfix 속성을 변경하면 된다.
Impl이 default.

<repositories base-package="~~" repository-impl-postfix="Impl" />

JavaConfig 설정은 아래와 같다.
@EnableJpaRepositories(basePackages = "~~", repositoryImplementationPostfix = "Impl")

댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

Orange for Oracle에서 한글 깨짐 해결책

[UI] GNB·LNB·SNB·FNB 용어 설명