Java/Spring Jpa
delete() 메서드 최적화
move2
2023. 2. 2. 22:26
Spring data jpa의 delete() 메서드는 바로 삭제 쿼리를 날리지 않고 cascade, orphanRemoval 에 의한 자식도 삭제가 누락되지 않도록 영속성 상태인지 확인해서 영속성 컨텍스트에 없다면(!em.contains(entity)) 엔티티를 조회해서 영속성 상태로 바꾼다.
때문에 JpaRepository 의 delete() 는 해당 엔티티를 바로 삭제하지 않고, remove() 메소드를 통해 remove 상태로 바꾼다.
데이터를 영속 상태로 바꾸지 않고 바로 삭제 쿼리를 날리고 싶으면 다음과 같이 써주면 된다.
@Repository
@Transactional
public class MyRepositoryImpl implements MyRepository {
@Autowired
EntityManager entityManager;
@Override
public void delete(User user) {
entityManager.remove(user);
}
}