작성자 : 김다희
기존 SeriesRepository를 확장해서 CustomRepository를 만들었다. 새로운 레포를 CustomSeriesRepository로 네이밍하고 실행했더니 다음과 같은 오류가 났다.
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'paymentController' defined in file [/Users/Kimdahee/prgrms-dev/final-project/Team_Sagack_MonthSub_BE/build/classes/java/main/com/prgrms/monthsub/module/payment/app/PaymentController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'paymentService' defined in file [/Users/Kimdahee/prgrms-dev/final-project/Team_Sagack_MonthSub_BE/build/classes/java/main/com/prgrms/monthsub/module/payment/app/PaymentService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'seriesService' defined in file [/Users/Kimdahee/prgrms-dev/final-project/Team_Sagack_MonthSub_BE/build/classes/java/main/com/prgrms/monthsub/module/series/series/app/SeriesService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'seriesRepository' defined in com.prgrms.monthsub.module.series.series.app.SeriesRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.List com.prgrms.monthsub.module.series.series.app.CustomServiceRepository.findAllByCategoryIn(java.lang.Long,int,java.util.List,java.time.LocalDateTime)! Reason: Failed to create query for method public abstract java.util.List com.prgrms.monthsub.module.series.series.app.CustomServiceRepository.findAllByCategoryIn(java.lang.Long,int,java.util.List,java.time.LocalDateTime)! Operator IN on category requires a Collection argument, found class java.lang.Long in method public abstract java.util.List com.prgrms.monthsub.module.series.series.app.CustomServiceRepository.findAllByCategoryIn(java.lang.Long,int,java.util.List,java.time.LocalDateTime).; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.prgrms.monthsub.module.series.series.app.CustomServiceRepository.findAllByCategoryIn(java.lang.Long,int,java.util.List,java.time.LocalDateTime)! Operator IN on category requires a Collection argument, found class java.lang.Long in method public abstract java.util.List com.prgrms.monthsub.module.series.series.app.CustomServiceRepository.findAllByCategoryIn(java.lang.Long,int,java.util.List,java.time.LocalDateTime).
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
기존에는 아래와 같은 네이밍으로 코드를 작성했는데 알고보니 custom repository를 만들려면 따라야하는 네이밍 규칙이 있었다.
기존코드
public interface SeriesRepository extends JpaRepository<Series, Long>,
DynamicSeriesRepository {
...
}
public interface DynamicSeriesRepository {
...
}
@Repository
public class SeriesRepositoryCustom implements DynamicSeriesRepository {
...
}
수정 후 코드
public interface SeriesRepositoryCustom extends JpaRepository<Series, Long>,
DynamicSeriesRepository {
...
}
public interface DynamicSeriesRepository {
...
}
@Repository
public class SeriesRepositoryCustomImpl implements DynamicSeriesRepository {
...
}
→ Impl을 꼭 붙여주자!