본문 바로가기

delete2

springboot delete시 DB접근, 쿼리 횟수에 대한 고찰(mybatis, jpa) 이 글은 프로젝트를 진행하면서 delete를 진행 시 mybatis 및 jpa를 사용하였을 때 DB에 접근하는 횟수 및 쿼리 횟수에 대해 비교하여 주관적으로 작성한 글이다. Article 테이블이 DB에 저장되어 있다고 하자. 여기서 Ariticle 하나를 delete 하려고 한다. jpa는 영속성 컨테스트라는 1차 캐시를 가지고 있다. 그렇기에 트랜젝션 안에서 select를 통해 Article 테이블 정보를 객체로 가져오면은 이에 해당하는 정보가 영속성 컨테스트에 저장된다. 그리고 delete를 실행하면 쿼리를 따로 저장해 놓았다가 트랜젝션 종료 시 저장해 놓은 쿼리를 DB에서 전달하여 실행하게 된다. 즉, article를 select하기 위해 DB접근 1회, 쿼리 실행 1회, 트랜젝션이 종료되면 쿼리.. 2023. 6. 24.
springboot with mybatis - foreign key로 연결된 행 삭제 이 글은 JPA로만 프로젝트를 진행하다가 mybatis를 사용할 때 발생하는 문제중 고아객체에 관한 내용을 담고 있다. 저번 프로젝트에서 스프링부트와 JPA로 진행을 하였는데 delete 쿼리를 날릴 때 고려한 것은 고아객체였다. 외래키로 연관관계에 있는 두 엔티티 부모를 삭제하면 부모의 외래키를 가지고 있는 자식은 어떻게 되는가? 에 대한 내용이 고아객체 내용이다. JPA에서는 부모객체가 삭제되어 없는 상황일 때 자식객체를 고아객체로 표현하였고 이를 객체 내의 어노테이션을 달아서 해결했었다. 그렇다면 Mybayis에서 어떻게 해결할까? 처음에는 고아객체가 데이터베이스 전체에서 쓰이는 말인줄 알았지만 알고보니 JPA에서만 사용되는 말이었다. 그렇기에 Mybatis 고아객체라고 검색을 해도 인터넷에는 나오.. 2023. 4. 9.