====== Spring Data JPA - Custom Repository ====== JpaRepositoryFactoryBean과 JpaRepositoryFactory에 의해서 Repository 의 구현체가 결정되는 듯. 현재 기본 구현체는 SimpleJpaRepository 혹은 QueryDslRepository 두개임. @EnableJpaRepositories(repositoryFactoryBeanClass = 여기서 다른 팩토리Bean 지정) ===== 구현할 클래스들 ===== * **''[Custom]JpaRepositoryFactoryBean''** : ''JpaRepositoryFactoryBean''을 상속하여 구현하고 * ''createRepositoryFactory()''를 오버라이드하여 ''[Custom]JpaRepositoryFactory'' 객체를 생성하여 리턴한다. * **''[Custom]JpaRepositoryFactory''** : ''JpaRepositoryFactory''를 상속하여 구현하고, * ''getTargetRepository()''를 오버라이드하여 ''[Custom]JpaRepositoryImpl''객체를 리턴한다. * ''getRepositoryBaseClass()'' 메소드를 오버라이드하여 ''[Custom]JpaRepositoryImpl'' 객체를 리턴한다. * **''[Custom]JpaRepository''** 인터페이스 : ''JpaRepository''와 ''QueryDslPredicateExecutor'', ''JpaSpecificationExecutor''를 상속한 인터페이스. 상속 대상 인터페이스는 무엇을 원하느냐에 따라 다르다. Specification이 불필요하다면 ''JpaSpecificationExecutor''를 상속할 필요가 없는 식. * 여기서 Custom한 메소드를 자유롭게 추가해 주어 Repository를 확장할 수 있다. * **''[Custom]JpaRepositoryImpl''** : ''[Custom]JpaRepository'' 인터페이스를 구현하고 ''QueryDslJpaRepository'' 혹은 QueryDSL이 불필요하면 ''SimpleJpaRepository''를 상속한다. * 여기서 Custom한 메소드를 구현한다.