[JPA] Inheritance Entity Multi Repository

Entity 상속의 경우 다중의 JPA 인터페이스를 구현해야 할 경우가 있다.
예로,


이럴 경우 아래와 같이 인터페이스를 구현해서 사용 할 수 있다.

public interface BaseRepository extends JpaRepository<Base, Long> { ... }

public interface AImplRepository extends JpaRepository<Base, Long> { ... }

public interface BImplRepository extends JpaRepository<Base, Long> { ... }


이처럼 사용할 시에 여러 인터페이스에 공통된 메소드가 추가 되어야 한다.
이럴땐 아래와 같은 방법을 사용해 보자.

우선 최상위 repository를 아래와 같이 만들고,

@NoRepositoryBean
public interface CommonBaseRepository<T extends Base> extends JpaRepository<T, Long> { ... }

이를 상속받아 인터페이스를 만들자.

public interface BaseRepository extends CommonBaseRepository<Base> { ... }

public interface AImplRepository extends CommonBaseRepository<AImpl> { ... }

public interface BImplRepository extends CommonBaseRepository<BImpl> { ... }

공통적으로 사용할 수 있는 인터페이스는 최상위 단에 정의 함으로써 아래와 같이 중복된 코드를 줄일 수 있다.

@NoRepositoryBean
public interface CommonBaseRepository<T extends Base> extends JpaRepository<T, Long> {
    List<T> findAll();
    Optional<T> findByEmail(String email);
    ...
}


댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

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

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