[JPA] Inheritance Entity Multi Repository
Entity 상속의 경우 다중의 JPA 인터페이스를 구현해야 할 경우가 있다.
예로,
이럴 경우 아래와 같이 인터페이스를 구현해서 사용 할 수 있다.
public interface BaseRepository extends JpaRepository<Base, Long> { ... }
public interface AImplRepository extends JpaRepository<Base, Long> { ... }
예로,
이럴 경우 아래와 같이 인터페이스를 구현해서 사용 할 수 있다.
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);
...
}
List<T> findAll();
Optional<T> findByEmail(String email);
...
}
댓글
댓글 쓰기