[항해99] 221219 정규 36일차 TIL

jinni·2022년 12월 19일
0

항해99

목록 보기
41/52

들어가기 앞서

사실 오늘 TIL에 들어간 내용이 5주차 WIL에도 많이 들어가있다.

프론트분들과 엄청난 소통을 진행하며, 퍼뜩퍼뜩 하는 중,,,,

회고

오늘한 것

  • 테스트 서버 구현
  • 메인 서버 comment CRUD 진행 (PR만 남았지롱)
  • JPQL을 이용한 게시글, 댓글의 양방향 연관관계 삭제하기 연구

느낀 점

기술 매니저님들과 얘기를 해보면, cascade 를 jpa에 대해서 완벽하게 숙지하지 못 하면, 사용하지 않는 것이 좋다고 말씀하시는 분들이 계신다. 또한, 실무에서도 데이터에 관한 삭제를 잘 하지도 않는다고 조언을 해주셨다.

그래서 JPQL로 쿼리를 날려서 삭제해보기로 했다... 무수히 많은 삽질이 오갔고 같이 연구하던 다른 분도 같이 삽질하다 득도..

덥썩 알려달라고 졸랐다.

Post와 Comment가 서로 양방향 연관관계라고 가정했을 때

CustomPostRepository

public interface CustomPostRepository {
    public void deletePost(Long id);
}

PostRepository

public interface PostRepository extends JpaRepository<Post, Long>, CustomPostRepository {

}

PostRepositoryImpl

public class PostRepositoryImpl implements CustomPostRepository {

    @PersistenceContext
    private EntityManager em;

    @Override
    // Long id = 삭제할 게시물의 번호
    public void deletePost(Long id) {
        // 쿼리문 -> Comment 삭제 => 조건) comment 테이블의 post 의 postId 의 값을 setParameter 의 name으로 넘겨줌. 
        em.createQuery("delete from Comment c where c.post.postId =:id")
                // =:id => deletePost 파라미터의 name값으로 설정 및 삭제할 게시글 번호 id 삽입
                .setParameter("id", id)
                .executeUpdate();

        em.createQuery("delete from Post p where p.postId =:id")
                .setParameter("id", id)
                .executeUpdate();

        em.clear();
    }
}

요렇게 작성해주면 깔끔하게 참조 에러가 터지지 않고 날라가게 된다!!

오늘도 프론트와의 소통이 굉장히 중요하단 걸 깨달음 ~ (물론 모든 협업 시, 소통이 제일 중요하긴 하지만.)

profile
조금씩 천천히 꾸준하게

0개의 댓글