일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- db
- JPQL
- JDBC
- 알고리즘
- 백준
- java
- kotlin
- 스프링 핵심 기능
- AOP
- jpa
- Proxy
- Servlet
- 그리디
- spring
- Greedy
- 스프링 핵심 원리
- Android
- 스프링
- Exception
- Spring Boot
- pointcut
- transaction
- http
- SpringBoot
- 김영한
- QueryDSL
- Thymeleaf
- springdatajpa
- 인프런
- 자바
- Today
- Total
개발자되기 프로젝트
['21.07.19] DB에서 삭제하기 본문
1. DB에서 삭제가 되지 않는다...에러 내용
리스트에서 삭제를 시도해도 되지 않는다.
아래와 같은 에러가 발생한다.
.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type
'int'; nested exception is java.lang.NumberFormatException: For input string: "undefined"]
에러의 원인은 int가 들어와야 하는데 String값인 "undefined"가 들어왔다.
크롬에서는 다음과 같은 에러가 발생한다.
jquery.min.js:4 DELETE http://localhost:8080/api/delete/movie/undefined 400
400에러인 것으로 보아 어디에서 변수명이 일치하지 않은 것 같다.
2. 에러 원인 & 수정
변수명이 일치하지 않아 발생한 문제였다.
<Movie Entity> movie entity에서 @Id는 int id로 지정했다.
public class MovieEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
<HTML> 해당 내용을 보면 버튼 클릭 시 movie.id를 가져와서 deleteMovie method를 실행한다.
여기서 id를 index로 지정을 했다. 여기서 실제 Movie Entity와 HTML간 매칭이 안되어 발생한 문제이다.
<button v-on:click="deleteMovie(movie.id)" type="button" class="btn btn-primary btn-lg"
style="width: 100%;">리스트에서 삭제
</button>
<JS> 마찬가지로 js에서도 id가 아닌 index로 받았었다.
var movie_list = new Vue({
el: '#movie-list',
data: {
movie_list : {}
},
methods: {
deleteMovie: function (id) {
$.ajax({
type: "DELETE" ,
async: true ,
url: `/api/delete/movie/${id}`,
timeout: 3000
});
getMovie();
}
}
});
3. 수정 결과
삭제에 성공했다.
실제로 delete query가 동작한 것을 확인했다.
Hibernate:
delete
from
movie_entity
where
id=?
하기만 실제 페이지에선 바로 반영이 되지 않는다.
버튼을 여러번 클릭해야 없어지고 500에러가 발생한다.
4. 바로 반영이 안되는 원인
예상에는 삭제 버튼을 누르면 delete 진행 후 다시 comment의 select 쿼리가 돌아가고,
리스트 업데이트를 위해 findAll이 돌아간 결과가 출력되었다.
이때 Movie Entity가 지워지지 않고 출력이 되어있다.
Hibernate:
delete
from
movie_entity
where
id=?
Hibernate:
select
commentent0_.movie_id as movie_id3_0_0_,
commentent0_.id as id1_0_0_,
commentent0_.id as id1_0_1_,
commentent0_.content as content2_0_1_
from
comment_entity commentent0_
where
commentent0_.movie_id=?
MovieDTO(id=6, title=어벤져스: 엔드게임, stateCode=null, link=https://movie.naver.com/movie/bi/mi/basic.nhn?code=136900, image=http://shop1.phinf.naver.net/20210602_68/1622598578442darjS_JPEG/23734467097563516_343426810.jpg, subtitle=Avengers: Endgame, director=안소니 루소|조 루소|, actor=로버트 다우니 주니어|크리스 에반스|크리스 헴스워스|마크 러팔로|스칼릿 조핸슨|제레미 레너|돈 치들|폴 러드|브리 라슨|카렌 길런|브래들리 쿠퍼|조슈 브롤린|, userRating=9.38, commentDTOs=[])
하지만 이 시점에 swagger 를 통해 findAll을 진행하면 DB에는 entity가 없다.
즉, 실제 DB값과 차이가 발생한 것이다.
5. 앞으로 할 일
1) 이미지는 Naver 이미지 검색 API를 따로 사용하여 가져오기. --> 고화질
2) Delete 되도록 코드 이해하고, 고쳐놓기
4) DB에 저장된 영화에 대하여 comment추가할 수 있도록 기능 추가.
6. GitHub : 210719, Front End#3, Delete method
'Project > 영화리뷰 관리' 카테고리의 다른 글
['21.07.20] comment기능 추가 (0) | 2021.07.21 |
---|---|
['21.07.20] Delete Method #2 (0) | 2021.07.20 |
['21.07.19] 이미지 검색 추가 (0) | 2021.07.19 |
['21.07.18] 간단한 프론트 개발#1 (0) | 2021.07.18 |
['21,07,18] 중복제거 (0) | 2021.07.18 |