Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

['21.07.19] DB에서 삭제하기 본문

Project/영화리뷰 관리

['21.07.19] DB에서 삭제하기

Seung__ 2021. 7. 20. 00:26

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


 

 

bsh6463/MovieManager

Contribute to bsh6463/MovieManager development by creating an account on GitHub.

github.com

 

'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
Comments