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

작성자 없음

작성자 정보가 삭제된 글입니다.

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

30강. 책 생성 API 개발하기

30강 오류

작성

·

1.3K

·

수정됨

1

안녕하세요 선생님.

30강에서 서버를 실행시키고 책 등록을 하면 오류가 뜹니다. 그런데 application.yml 설정 중 jpa hibernate ddl-auto를 create drop으로 바꾸면 오류가 안 뜨고 책 등록이 되긴 하는데 서버를 다시 시작하면 테이블이 사라집니다. 이걸 어떻게 해야 할까요?

감사합니다.

답변 1

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, 화이팅님!! 질문 올려주셔서 감사합니다!! 😊

현상 : ddl-auto를 create-drop으로 설정하면 책 등록 기능이 잘 동작한다. (다른 옵션 ex. none 이면 책 등록 기능이 동작하지 않는다) 하지만 서버를 다시 시작하면 테이블이 사라진다.

네네 맞습니다! 말씀해주신 것처럼 ddl-auto를 create-drop으로 하게 되면,
create-drop 옵션 자체가

  • 서버가 시작될 때 테이블을 새로 만들고

  • 서버가 종료될 때 테이블을 제거하는

원리로 동작해서, 서버를 끄시게 되면 테이블도 같이 사라지게 됩니다!!

 

이럴 때는 다음과 같은 방법으로 해결할 수 있습니다.

  1. ddl-auto를 none으로 한다

아마 이렇게 하시면 에러가 나셨을 거에요! 그 에러의 원인은 서버가 데이터를 저장하려고 했는데, DB에 테이블에 없어서 그렇습니다! 따라서 테이블을 직접 만들어 주어야 합니다.

  1. book 테이블을 DB에 만들어준다.

아마 user 테이블도 없으실테니 함께 만들어주시면 좋을 것 같아요!

create table user(
  id bigint auto_increment,
  name varchar(25),
  age int,
  primary key (id)
);

create table book(
  id bigint auto_increment,
  name varchar(255),
  primary key (id)
);

1번과 2번을 모두 잘 하시면 에러 없이 기능이 동작하고, 서버를 종료했다가 다시 시작하더라도 데이터가 남아 있을겁니다!!!

 

꼭 해결되셨으면 좋겠습니다! 또 안되시는 부분 있으시면 편하게 질문 올려주세요~~ 감사합니다!! 🙏🙏

2023-03-06 21:51:18.266 ERROR 14340 --- [nio-8080-exec-2] o.hibernate.id.enhanced.TableStructure : could not read a hi value

2023-03-06 21:51:18.267 WARN 14340 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1146, SQLState: 42S02

2023-03-06 21:51:18.267 ERROR 14340 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : Table 'library.hibernate_sequence' doesn't exist

2023-03-06 21:51:18.289 ERROR 14340 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: error performing isolated work; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: error performing isolated work] with root cause

선생님 테이블 user, book 모두 있는데 에러가 이렇게 뜹니다. 어떻게 해야 할까요...??

최태현님의 프로필 이미지
최태현
지식공유자

빠르게 답변 남겨주셔서 감사드립니다!!!

확인해보니 library.hibernate_sequence 테이블이 없다고 나오는데요!! 이 친구는 저희가 테이블의 PK 전략을 다르게 적용해주었을 때 사용되는 친구입니다. 즉, private Long id = null; 위에 어노테이션이 잘 달려 있는지 확인해보면 될 것 같습니다!!

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id = null;

JPA Entity 객체에 위의 어노테이션이 잘 붙어 있어야 합니다 ㅎㅎㅎㅎ (startegy까지 동일해야 해요!!)

즉, 30강을 기준으로 User 객체와 Book 객체에 있는 id 에 위 어노테이션이 잘 붙어 있어야 합니다!

잘 되네요 감사합니다 ♡♡

최태현님의 프로필 이미지
최태현
지식공유자

나이스입니다~~~!! 👍👍

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기