본문 바로가기

JPA

SpringBoot + JPA 게시판 delete 삭제 메소드 @DeleteMapping 일괄삭제 or 다중삭제 @Query 활용

취업 후 교육기간 거쳐 처음 프로젝트참여중이며 맡은 부분은 공지사항관련 게시판 개발

 

Rest Api 개발 - 단건 삭제 메소드가 아닌 클라이언트가 선택한 모든 게시물을 일괄삭제할 다중 삭제 메소드 개발 중

(아니 왜 웬만한 강의나 대충검색해서 나오는건 이런거 안가르쳐주냐고)

 

진행중인 프로젝트 : SpringBoot, JPA, java17, mariaDB 활용  

 

이전까지 개인프로젝트에서는 h2데이터베이스로 연습을 했었고 현재 실무 프로젝트에서는 MariaDB연동해서 사용중..

내가 개발한 일괄삭제메소드는 queryDSL을 사용하지 않고 JPA의 @Query 어노테이션을 사용하여 jpql을 사용하는 방식.

https://jojoldu.tistory.com/235
일괄삭제 메소드관련해서는 위 주소 갓조졸두님의 블로그 글을 참고하시길 바랍니다.
저도 참고하여 개발하였습니다.

실무 개발하면서 느끼는 점은 queryDSL의 중요성을 너무 뼈저리게 느낌

정말 querydsl을 써야하는 이유가 분명히 있다

게시판 검색기능을 개발할 때 여러 검색조건을 적용해야 할 경우
repository 인터페이스에서 extentds하여 JpaRepository 상속받아서 검색기능을 개발할 때 
메소드의 제목도 엄청 길어지고 따라서 가독성도 떨어지고 개발할 때 번거로움
예를들어 레포지토리에서

Page<Article> findByArticleTypeAndArticleSortationAndArticleTitleContainingOrArticleContentContainingIgnoreCase(파라미터타입 파라미터, 파라미터타입 파라미터, .......); 이런식으로 queryDSL을 사용하지 않으면 이것보다 더심해질 수 있음.
이를 보완해줄 수 있는 방법이 queryDSL 이다. 여기서는 queryDSL을 다루지 않는다

 

일괄삭제관련 api 개발 중에 당연(?)스럽게 내가 연습해왔던 메소드를 복붙해서 개발하려고 했다. 

 

board_entity는 @entity를 적용시켜준 클래스이다.

위 사진에 @Query처럼 jpql문법에 맞도록(?) 개발해서 내 토이프로젝트에서는 잘 동작하였었다.

근데 갑자기 왜 에러가 날까??? (mariaDB랑 연동해서 개발하는 것 때문에 그런걸까?)

잘 안보이시나요? 죄송합니다

mariaDB에서는 jpql문법이 안먹히는건가 검색해봤는지만 이유는 나도 잘 모르겠다.....

 

오류코드를 봤을 때 @Query() 안에 내가 적어놓은 것들이 잘못된걸까 싶어서 다시 곰곰히 찾아본 결과

"delete from board_entity b where b.id in : ids" << 여기서 b.id라고 해둔게 잘못되었다고 느껴짐. 왜냐?

Entity클래스에서 @Column(name="board_id")라고 정의해줘서 b.id가 아닌 b.board_id로 해줘야되지 않겠나 싶었음!

근데 그렇게 수정했었지만 그것도 아니었다...... 아니 도대체 뭐가 문제냐고!!!!!

 

뭐가 문제일까

(postman 활용법은 google검색으로 '^')

postman을 사용하여 나름대로 여러가지 방법으로 계속 테스트했었는데

해결이 안됐다... 초보는웁니다... 도대체 뭐가문제냐고!!

 

아니 근데

아예 저 @Query어노테이션 안에 b를 없애보니까 갑자기 되는것이 아니겠는가?! - @Query()안에 잘보세요

board_entity b, b.board_id 이렇게 안하고 b. <- 아예 생략

이렇게하고 postman으로 테스트해보니 아니 이게 웬걸? 성공하는 것이었다!!!

인텔리제이에서 드디어 에러말고 바인딩 되었다고 뜸!

해결은 했지만 솔직히 어리둥절하다. mariaDB가 jpql을 인식하지 못하는건가? h2에서는 잘만됐던건데 흠..

무튼 인텔리제이 하단에 뜨는 query문을 잘봐야된다고 인터넷강의에서 늘 들었던말이지만

잘 볼줄도 몰랐고 와닿지 않았었다. 근데 이제 곰곰히 잘 찾아봐야되겠다고 느낀다