jpa에서는 entity의 값이 바껴있으면, dirty checking이라고 해서, 자동으로 flush?할 때 변경 쿼리를 작성해서 데이터베이스 값도 바꿔준다.
영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다.
(여기서는 itemService.saveItem(book) 에서 수정을 시도하는 Book 객체다. Book 객체는 이미 DB에 한번 저장되어서 식별자가 존재한다. 이렇게 임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다.)
@Transactional
public void updateItem(Long itemId, Book param) {
Item findItem = itemRepository.findOne(itemId);
findItem.setPrice(param.getPrice());
findItem.setName(param.getName());
findItem.setStockQuantity(param.getStockQuantity());
}
준영속 상태의 엔티티를, 영속상태로 변경할 때 사용
merge하면 위의 코드를 jpa가 알아서 다 해줌.
--> merge를 쓸 경우 할당되지 않은 값에 대해서는 null로 자동으로 넣어짐!!!
-> 그렇기 때문에 merge보다는 변경감지를 사용하는것이 좋음.