해결된 질문
작성
·
351
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요.
현재 '실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의'에서 'JPA와 DB 설정, 동작확인' 강의를 듣고 있습니다.
H2 데이터베이스에 연결하고, 테스트 코드를 실행해서 통과했다고 나옵니다. 그런데 강의 영상처럼 create table, drop table 등의 메시지가 터미널에 나오기는 하는데 제대로 된 건지 잘 모르겠습니다. 그리고 가장 큰 문제는 H2 데이터베이스에 Member 테이블이 생성되지 않았습니다.
아래 코드와 스크린샷을 첨부합니다.
제가 한 부분 중 잘못된 부분이 있는 건지 궁금합니다.
그리고 어떻게 하면 해결할 수 있는지 궁금합니다.
Member
package jpabook.jpashop;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
MemberRepository
package jpabook.jpashop;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Repository
public class MemberRepository {
@PersistenceContext
private EntityManager em;
public Long save(Member member) {
em.persist(member);
return member.getId();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
# show_sql: true
format_sql: true
logging.level:
org.hibernate.SQL: debug
org.hibernate.type: trace #스프링 부트 2.x, hibernate5
org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6
MemberRepositoryTest
package jpabook.jpashop;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
@Test
@Transactional
public void testMember() throws Exception {
//given
Member member = new Member();
member.setUsername("memberA");
//when
Long saveId = memberRepository.save(member);
Member findMember = memberRepository.find(saveId);
//then
Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
}
}
테스트 결과의 일부분 스크린샷
이 상태로 H2에 접속했습니다.
테스트 후 H2 데이터베이스의 스크린샷
위의 스크린샷처럼 테스트를 실행하면 통과로 나오기는 합니다.
그렇지만 강의 영상처럼 create table, drop table이라고 되어있는 부분이 있지만 제대로 된 건지 모르겠습니다.
그리고 테스트 후 H2 데이터베이스를 보면 Member가 생성되지 않았습니다.(가장 큰 문제)
제 코드나 제가 실행한 부분 중에서 잘못된 부분이 있는지 궁금합니다.
그리고 해결 방법도 궁금합니다.
감사합니다.
답변 2
0
안녕하세요. 김진수님, 공식 서포터즈 코즈위버입니다. AI 답변에 더하여 답변 드립니다.
INFORMATION_SCHEMA 왼쪽에 + 마크가 보이실 텐데요 이 부분을 클릭하여 Member 테이블이 있는지 확인해주시겠어요?
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
H2 데이터베이스에 연결하고 테스트 코드를 통과했지만, Member 테이블이 생성되지 않은 것 같습니다.
코드는 올바르게 작성되었으며, 문제가 발생한 부분을 찾아보겠습니다.
우선, H2 데이터베이스의 설정을 확인해보세요. 강의에서 설치한 H2 데이터베이스가 정상적으로 실행되고 있어야 합니다. H2의 콘솔 화면을 확인하거나, 설정파일에 올바른 URL, 유저명, 패스워드를 설정해야 합니다.
그다음으로, Member 엔티티 클래스에 @Table(name = “테이블이름”) 어노테이션을 추가해보세요. name 속성에는 생성하고자 하는 테이블의 이름을 지정할 수 있습니다. 예를 들어, @Table(name = “MEMBER”)와 같이 작성하면 MEMBER 테이블이 생성됩니다.
마지막으로, 프로젝트의 로그를 확인해보세요. 로그에는 H2 데이터베이스에서 테이블을 생성하는 로그 메시지가 출력됩니다. 로그에서 오류 메시지나 예외가 발생하지 않았는지 확인해보세요.
위의 세 가지 사항을 확인해보시고, 문제가 해결되는지 확인해보세요. 문제가 여전히 발생한다면, 질문 내용과 함께 상세한 로그나 스크린샷을 함께 첨부해주시면 더 자세한 도움을 드릴 수 있을 것 같아요. 해결하지 못하는 경우에는 개발자 도움이 필요한 문제일 수 있으므로, 강의 상세 페이지의 Q&A나 지식공유자에게 문의해보시는 것도 좋은 방법이 될 수 있어요. 이 점 참고해주세요. 해결되길 바라며, 더 궁금한 점이 있으면 언제든지 말씀해주세요! 좋은 하루 되세요.