해결된 질문
작성
·
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 쿼리가 나가는 것을 확인하실 수 있으십니다.
0
0
https://drive.google.com/drive/folders/1XCcEoKjVyfPng9xAh_OHPGHk5e9sKgcH?usp=sharing
여기 있습니다!ㅎㅎ initDb의 초기화, @PostConstrucotor가 안먹힙니다.
맞습니다 ㅎㅎ