정말 중요한 부분이다!
100% 이해하자.
영속성 컨텍스트가 더는 관리하지 않는 엔티티이다. (트랜잭션이 종료되면 준영속 상태가 되지 않나?)
@PostMapping("/items/{itemId}/edit")
public String updateItem(@PathVariable("itemId") Long itemId, @ModelAttribute("form") BookForm form) {
// Book book = (Book) itemService.findItem(form.getId());
Book book = new Book();
book.setId(form.getId());
book.setName(form.getName());
book.setPrice(form.getPrice());
book.setStockQuantity(form.getStockQuantity());
book.setAuthor(form.getAuthor());
book.setIsbn(form.getIsbn());
itemService.save(book);
return "redirect:/items";
}
준영속 엔티티의 경우 더티체킹이 일어나지 않는다.
변경 감지 기능 사용 (권장)
@Transactional
public void updateItem(Long itemId, Book param) {
Item findItem = itemRepository.findOne(itemId);
findItem.setPrice(param.getPrice());
findItem.setStockQuantity(param.getStockQuantity());
}
병합(merge) 사용
em.merge(item)