작성
·
261
0
안녕하세요. 강사님!
강의해주신 내용 중 Event-Enrollment 연관매핑되어 참가신청하는 로직을 참고하여 개발중에 있습니다.
저는 Shop과 Product 를 Event, Enrollment와 동일한 구조로 개발하였는데, Shop 엔티티에 매핑되어있는 products 에 add할 때 NullPointerException 을 발생시키네요.
products에 new ArrayList<>(); 로 초기화도 시켜두었는데 에러 나는 이유가 무엇일지 알려주시면 감사하겠습니다!
메인Runner 클래스에서 테스트한건데 그부분이 문제일까요?..
<강의 내 Event, Enrollment 관련 코드>
-- Event.java
@OneToMany(mappedBy = "event")
@OrderBy("createdDate")
private List<Enrollment> enrollments = new ArrayList<>();
// 생략
public void addEnrollment(Enrollment enrollment) {
this.enrollments.add(enrollment);
enrollment.setEvent(this);
}
-- Enrollment.java
@ManyToOne
private Event event;
-- EventService.java
public void newEnrollment(Account account, Event event) {
if(enrollmentRepository.existsByEventAndAccount(event, account)) {
throw new IllegalArgumentException("이미 참가 신청된 계정입니다.");
}
Enrollment enrollment = Enrollment.builder().account(account).build();
enrollmentRepository.save(enrollment);
event.addEnrollment(enrollment);
}
<제 코드>
-- Shop.java
public class Shop extends CommonField {
@Id @GeneratedValue
private Long id;
private String shopName;
private String siteUrl;
@OneToMany(mappedBy = "shop")
@OrderBy("createdDate")
private List<Product> products = new ArrayList<>();
public void addProduct(Product product) {
this.products.add(product); // --> this.products에서 NullPointerException 발생!!
product.setShop(this);
}
}
-- Product.java
public class Product extends CommonField {
@Id
@GeneratedValue
private Long id;
@Column(unique = true)
private String productId;
private String title;
private String price;
private String thumbUrl;
private String detailUrl;
@ManyToOne
private Shop shop;
}
-- 테스트 코드
private void CrawlerTest() throws IOException {
// 쇼핑몰 생성
Shop shop = Shop.builder().shopName("미스터스트리트").siteUrl("https://mr-s.co.kr/").build();
shopRepository.save(shop);
Shop newshop = shopRepository.findByShopName(shop.getShopName());
// 최신 상품 목록 크롤링
Crawler crawler = new mrStreetCrawler(shop.getSiteUrl());
List<Product> products = crawler.run();
// 연관관계 설정
for(Product product : products) {
product = productRepository.save(product);
newshop.addProduct(product); // --> 에러 발생
}
}
답변 1
0
음 글쎄요. 디버거를 사용해서 해당 부분에서 어떤 인스턴스가 왜 null인지 확인해 보셔야겠네요. list는 초기화를 하셨으니 null이 아닐것 같은데 그럼 혹시 product가 null인건 아닌가 싶네요.