문제
- 인텔리제이에서 mysql 데이터베이스를 drop하려고 하는데 갑자기 '[HY000][1008] Can't drop database 'voyagepost'; database doesn't exist. [42000][1049] Unknown database 'voyagepost'.' 이런 식의 에러 메시지가 출력 된 뒤 drop이 되지 않는다. 3분 전까지만 해도 잘 drop이 되었었는데...
- postman으로 api를 보내어서 확인중인데 createdAt과 modifiedAt이 저장이 안되어있고 null값으로 계속 나온다.
- 다른 기능들 (전체 조회, 하나만 조회, 삭제, 작성) 은 되는데 update 기능만 작동을 안함
시도
- Mysql Database
- 일단 refresh를 계속 시도하면서 drop을 table, schema 등 전부 시도해봄
-> 안됨
- 에러 메시지를 살펴보니 존재하지 않는 database라고 말하고 있다. 하지만 인텔리제이 상에서는 존재하는 걸로 나옴
-> 코드를 실행시켜서 확인
-> 실행이 되지 않고 에러메시지 (Unable to determine Dialect without JDBC metadata)가 출력됨
- 우선, createdAt과 modifiedAt이 제대로 들어가는지 확인
- 테이블에 있기는 한데 null 값으로 입력되는 거 보니 인식을 ResponseBody에서 보낸거를 인식 못하는 듯
- 계속 되는 고민 끝에 뭔가 Annotation을 빼먹은거 아닐까? 하는 의심이 들었다.
-> 강의에서 만든 Memo 프로젝트와 계속 비교해 보았다.
- Postman을 통해서 PUT 을 계속 날려본 결과 제대로 api로 들어가기는 한다.
-> 그렇다면 데이터는 보내주는데 데이터를 받지 못하거나 데이터베이스에서 수정을 못하고 있다는 뜻으로 생각
-> 출력을 해보니 데이터를 제대로 받기는 하는 것으로 보임
-> 데이터베이스에서 수정을 못하고 있는 것으로 보인다!!
해결
- voyagepost라는 이름의 database가 없다고 하니 cmd에서 mysql에 들어가서 show databases; 로 확인해보니 아까 만들었던 voyagepost가 없어졌다. 아마도 cmd를 종료하니 사라진 느낌인데...
-> voyagepost를 다시 만들어주고 cmd를 끄지 않고 하니 정상 작동이 된다.
-> 아까 cmd를 exit으로 종료하지 않고 강제종료해서 사라졌거나, drop하는 과정에서 schema 전체를 drop해버린 거 같다. (cmd 종료하고는 아무 상관 없는듯 ㅎㅎ)
-> 다시 하니까 저장됨
-> 해결
- ...Application.java에서 @EnableJpaAuditing 이 어노테이션을 추가해주지않았다.
-> TimeStamped.java에서 @EntityListeners(AuditingEntityListener.class) 어노테이션은 추가해주었고 Entity에다가 extends도 해주었는데 VoyagePoastApplication.java에서@EnableJpaAuditing@EnableJpaAuditing을 안해주었던 것...
-> 제대로 개념을 모르고 있다는 것, 사용법이 익숙지 않았다는 것
-> 해결... 은 했지만 다시 복습해야겠음
- 아무리 봐도 또 Annotation 문제인 것으로 보인다.
-> update하는 메서드는 코드가 굉장히 짧기 때문
-> VoyageController에 들어가서 updateVoyage를 'ctrl + 클릭' 해보니 VoyageService로 이동했다.
public Long updateVoyage(Long id, VoyageRequestDto voyageRequestDto) {
VoyagePost voyagePost = findVoyage(id);
voyagePost.update(voyageRequestDto);
return id;
}
-> 별 이상은 없어보이고 return 까지 제대로 출력되는 것을 볼 수 있었는데...
-> @Transactional을 안해줬음...
-> 해결
알게 된 점
- Database를 Drop할 때에 schema를 drop해버린다면 다시 create database ... 을 해야하므로 주의하자
-> drop은 테이블만 하는 걸로
- Timestamp를 Auditing할 경우에 실행시키는 파일인 ...Application.java에 @EnableAuditing을 해주어야 Auditing으로 사용 가능
-> 제대로 복습하자, 인강 3회독 이상...
- 데이터베이스를 수정할 경우에는 @Transactional이라는 Annotation을 꼭 붙여주어야지 수정이 가능하다고 어제 강의에서 들었는데 또 까먹었다...
-> 진짜 제대로 하자!!!!!