[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")
아래 처럼 인터페이스를 하나 작성 한다.
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")
댓글
댓글 쓰기