티스토리 뷰

반응형

안녕하세요! 이번에는 테이블의 delete와 초기화를 보다 쉽게할 수 있는 truncate 를 간단히 설명하고, 이를 JPA에서 구현하는 방법에 대해 설명드리고자 합니다. 

Truncate란? 

전체 데이터를 삭제하는 것처럼 보이지만 실제로 테이블을 DROP 후 CREATE 하는 작업, 실행 시 데이터 초기화는 물론이거니와 자동으로 생성된 AUTO_INCREMENT 또한 ID값이 1로 시작됩니다. 데이터를 삭제하는 것이 아닌 테이블을 제거하였다가 생성하므로 delete 쿼리를 전송하였을 때보다 속도가 월등히 빠릅니다.

장점: 속도 빠르고 효율적

단점: 외래키가 걸려있으면 에러 발생, 특정 데이터만 삭제 불가능

 

사용법

Repository

public interface SomethingTableRepository extends JpaRepository<SomethingTable, Long> {

  @Transactional
  @Modifying
  @Query(value = "truncate something_table", nativeQuery = true)
  void truncateSomethingTable();

}

Service

public class SomethingTableServiceImpl implements SomethingTableService {

  @Autowired
  private SomethingTableRepository repository;

  @Override
  public void truncate() {
    repository.truncateSomethingTable();
  }

}

 

 

참고: https://stackoverflow.com/questions/52989131/is-it-possible-to-use-truncate-in-spring-data-jpa-using-jparepository-or-a-mo

 

Is it possible to use "TRUNCATE" in Spring Data JPA using JpaRepository? Or a more effective method than the standard deleteAll(

Im currently using the standard jparepository method repository.deleteAll() to clean my table before adding new info. The table consists of 8300 rows with 5 columns each. It's currently taking abou...

stackoverflow.com

 

반응형
댓글
공지사항