JPA 및 Spring Data JPA에서 엔티티가 새로운 상태인지 판단하는 것은 데이터 저장 및 변경의 정확성과 효율성을 보장하기 위해 매우 중요합니다.
특히, 데이터베이스와의 상호작용 방식이 달라지기 때문에 엔티티 상태를 명확히 구분해야 합니다.
persist()
를 호출하여 INSERT 쿼리를 실행.merge()
를 호출하여 UPDATE 쿼리를 실행.Customer customer = new Customer();
customer.setId(1L); // ID를 수동으로 설정
customer.setName("Alice");
customerRepository.save(customer); // 중복 INSERT 발생 가능
사용자가 새로운 주문을 생성했지만 기존 주문이 수정된 경우:
Order order = new Order();
order.setId(1L); // 기존 주문 ID
order.setStatus("NEW");
orderRepository.save(order); // 기존 주문이 잘못 수정됨
save()
메서드 동작과 연관save()
는 엔티티가 새로운 상태인지 판단하여 persist()
또는 merge()
를 호출합니다.save()
가 잘못된 동작을 수행할 수 있습니다.새로운 상태로 판단했지만 기존 엔티티인 경우:
Order order = new Order();
order.setId(1L); // 기존 데이터 ID
order.setStatus("UPDATED");
orderRepository.save(order); // INSERT 대신 UPDATE가 필요하지만 잘못된 판단으로 INSERT 실행
save()
와 같은 메서드의 올바른 작동.엔티티의 상태를 올바르게 판단하는 것은 안정적이고 효율적인 애플리케이션을 만드는 데 필수적입니다.