인프런 커뮤니티 질문&답변

김상운님의 프로필 이미지
김상운

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

조회용 샘플 데이터 입력

초기화가 안되요ㅜㅜ

해결된 질문

작성

·

492

0

안녕하세요!

강의를 다 듣고 복습하다가 다시 진행하려고 init 패키지를 지운 이후 컴파일 시 초기화가 되지 않습니다.

어떠한 insert 쿼리가 나가지 않습니다.

선생님의 강의자료를 복붙해도 똑같이 초기화가 진행되지 않습니다. 하지만 이전 프로젝트에서는 잘 돌아갑니다.

혹시 초기화 하는데 있어서 어떤 설정을 잘못한걸까여?

package com.work.init;

import com.work.flow.domain.*;
import com.work.flow.domain.item.Book;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;

@Component
@RequiredArgsConstructor
public class InitDb {
private final InitService initService;
@PostConstruct
public void init() {
initService.dbInit1();
initService.dbInit2();
}
@Component
@Transactional
@RequiredArgsConstructor
static class InitService {
private final EntityManager em;
public void dbInit1() {
Member member = createMember("userA", "서울", "1", "1111");
em.persist(member);
Book book1 = createBook("JPA1 BOOK", 10000, 100);
em.persist(book1);
Book book2 = createBook("JPA2 BOOK", 20000, 100);
em.persist(book2);
OrderItem orderItem1 = OrderItem.createOrderItem(book1, 10000, 1);
OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 2);
Order order = Order.createOrder(member, createDelivery(member),
orderItem1, orderItem2);
em.persist(order);
}
public void dbInit2() {
Member member = createMember("userB", "진주", "2", "2222");
em.persist(member);
Book book1 = createBook("SPRING1 BOOK", 20000, 200);
em.persist(book1);
Book book2 = createBook("SPRING2 BOOK", 40000, 300);
em.persist(book2);
Delivery delivery = createDelivery(member);
OrderItem orderItem1 = OrderItem.createOrderItem(book1, 20000, 3);
OrderItem orderItem2 = OrderItem.createOrderItem(book2, 40000, 4);
Order order = Order.createOrder(member, delivery, orderItem1,
orderItem2);
em.persist(order);
}
private Member createMember(String name, String city, String street,
String zipcode) {
Member member = new Member();
member.setName(name);
member.setAddress(new Address(city, street, zipcode));
return member;
}
private Book createBook(String name, int price, int stockQuantity) {
Book book = new Book();
book.setName(name);
book.setPrice(price);
book.setStockQuantity(stockQuantity);
return book;
}
private Delivery createDelivery(Member member) {
Delivery delivery = new Delivery();
delivery.setAddress(member.getAddress());
return delivery;
}
}
}

위의 코드는 강의자료의 코드들입니다. 

답변 4

1

실행이 안되서 

application.properties 열어보니 mysql이라 깜짝 놀랬네요.

우선 저는 H2 DB로 테스트 했습니다만, mysql로 하셔도 기존에 제대로 동작했었다면 문제 없을거라 봅니다.

아래와 같이 init directory의 위치를 옮겨주세요.

두번째 이미지의 실행 결과에서도 확인 가능하시다시피  initdb가 적용되어 값이 들어가 있고, insert 쿼리가 나가는 것을 확인하실 수 있으십니다.

1

안녕하세요. 김상운님, 공식 서포터즈 OMG입니다.

문제가 발생하는 프로젝트(전체 코드)를 구글 드라이브로 공유 해주세요.

문제 해결에 도움 드리겠습니다.


감사합니다.

0

김상운님의 프로필 이미지
김상운
질문자

감사합니다..ㅠㅡㅠ 경로가 잘못되었군여,, 그러니 스캔을 못하지..

맞습니다 ㅎㅎ

0

김상운님의 프로필 이미지
김상운
질문자

https://drive.google.com/drive/folders/1XCcEoKjVyfPng9xAh_OHPGHk5e9sKgcH?usp=sharing

여기 있습니다!ㅎㅎ initDb의 초기화, @PostConstrucotor가 안먹힙니다.

김상운님의 프로필 이미지
김상운

작성한 질문수

질문하기