8w8u8
NullPointerException:Cannot invoke 000.findAll()" because "this.000Repository" is null 에러 해결 본문
back-end
NullPointerException:Cannot invoke 000.findAll()" because "this.000Repository" is null 에러 해결
jud1th 2025. 7. 5. 18:57문제
java.lang.NullPointerException: Cannot invoke "com.efub.leadtoyproject.domain.review.repository.ReviewRepository.findAllByProduct(com.efub.leadtoyproject.domain.product.domain.Product)" because "this.reviewRepository" is null
원인
reviewRepository 필드가 null인 상태에서 findAllByProduct 메서드를 호출하려고 할 때 발생한 문제이다. 이는 해당 의존성이 제대로 주입되지 않았기 때문이다.
해결
생성자 주입 방식을 바꾸는 과정에서 final
을 빼먹어서 문제가 발생했던 것이었다.
생성자 주입 방식
기본 생성자 주입
@Service
public class ReviewService {
private final ReviewRepository reviewRepository;
@Autowired
public ReviewService(ReviewRepository reviewRepository) {
this.reviewRepository = reviewRepository;
}
이때, 클래스에 생성자가 하나만 있는 경우 @Autowired
를 생략해주어도 된다.
다중 생성자 주입
@Service
public class ReviewService {
private final ReviewRepository reviewRepository;
private final ProductRepository productRepository;
@Autowired
public ReviewService(ReviewRepository reviewRepository) {
this.reviewRepository = reviewRepository;
this.reviewRepository = null; // 다른 생성자를 통한 주입이 아닌 경우
}
@Autowired
public ReviewService(ReviewRepository reviewRepository, ProductRepository productRepository) {
this.reviewRepository = reviewRepository;
this.productRepository = productRepository;
}
}
Lombok을 사용한 생성자 주입(추천)
@Service
@RequiredArgsConstructor
public class ReviewService {
private final ReviewRepository reviewRepository;
private final ProductRepository productRepository;
}
이때, 접근자를 final로 선언해야 lombok이 작동한다!!!
'back-end' 카테고리의 다른 글
CI/CD 파이프라인 구축 (GitHub Actions + AWS Codedeploy + EC2 + RDS + S3) (0) | 2025.07.05 |
---|---|
이미지 업로드 기능 작업 중 생긴 여러 문제들.. (3) | 2025.07.05 |
MYSQL 3819 에러 해결 : ERROR 3819 (HY000): Check constraint 'item_chk_1' is violated (0) | 2025.07.05 |
판매제품을 direct하게 연결하면 안될까? (0) | 2025.07.05 |
Record: 걱정 마, 내가 다 해줄게... (0) | 2025.07.05 |