spring data JPA 리포지토리는 인테페이스만 정의하고 구현체는 spring이 자동 생성한다.
spring data JPA가 제공하는 인터페이스를 직접 구현한다면 구현해야 하는 기능이 너무 많아진다.
필요한 기능만 인터페이스로 따로 만들어서 구현하고 이후에 data JPA 리포지토리에 상속해주면 된다.
사용자 정의 인터페이스
public interface MemberRepositoryCustom { List<Member> findMemberCustom(); }
구현 클래스
@RequiredArgsConstructor public class MemberRepositoryImpl implements MemberRepositoryCustom{ private final EntityManager em; @Override public List<Member> findMemberCustom() { return em.createQuery("select m from Member m") .getResultList(); } }
data JPA 리포지토리
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom
추가로 사용자 정의 인터페이스를 data JPA 리포지토리에 상속시켜주면 된다.
구현 클래스의 이름은 "data JPA 리포지토리 이름 + Impl"로 설정하여야 한다!
그래야 data JPA가 구현한 클래스를 찾아서 메서드 실행을 하게 된다.