사실 오늘 TIL에 들어간 내용이 5주차 WIL에도 많이 들어가있다.
프론트분들과 엄청난 소통을 진행하며, 퍼뜩퍼뜩 하는 중,,,,
기술 매니저님들과 얘기를 해보면, cascade
를 jpa에 대해서 완벽하게 숙지하지 못 하면, 사용하지 않는 것이 좋다고 말씀하시는 분들이 계신다. 또한, 실무에서도 데이터에 관한 삭제를 잘 하지도 않는다고 조언을 해주셨다.
그래서 JPQL로 쿼리를 날려서 삭제해보기로 했다... 무수히 많은 삽질이 오갔고 같이 연구하던 다른 분도 같이 삽질하다 득도..
덥썩 알려달라고 졸랐다.
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();
}
}
요렇게 작성해주면 깔끔하게 참조 에러가 터지지 않고 날라가게 된다!!
오늘도 프론트와의 소통이 굉장히 중요하단 걸 깨달음 ~ (물론 모든 협업 시, 소통이 제일 중요하긴 하지만.)