발생 상황
- PostgreSQL 에 hibernate로 처음 연동 후, 테스트용 API를 보내본 상황
java.lang.NullPointerException: Cannot invoke "project.labelingtool.backend.api.resource.adapter.out.persist.BankRepository.findAll()" because "this.repository" is null
at project.labelingtool.backend.api.resource.adapter.out.persist.ResourceRepositoryImpl.findAllBanks(ResourceRepositoryImpl.java:24) ~[main/:na]
at project.labelingtool.backend.api.resource.application.service.ResourceService.getBanks(ResourceService.java:19) ~[main/:na]
at project.labelingtool.backend.api.resource.adapter.in.rest.ResourceController.responseAllBanks(ResourceController.java:23) ~[main/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
// 이하 생략
발생 원인
- 아마도 repository 초기화가 잘 안된 것 같아서 어노테이션을 확인했으나 별 문제 없었다.
- 그래도 의존성 문제일 가능성이 높아보인다. 디버깅모드로 해결을 시도하였다.
대처
- 알고보니 custom repository impl을 만들 때
final
키워드를 누락한 것 같다. 다음은 수정된 코드
@Service
@RequiredArgsConstructor
public class FindAllBanksImpl implements FindAllBanksPort {
private final BankRepository repository;
@Override
public List<Bank> findAllBanks() {...}
}
Refs.