정말 중요한 부분이다!

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";
}

준영속 엔티티를 수정하는 2가지 방법

준영속 엔티티의 경우 더티체킹이 일어나지 않는다.

  1. merge 실행
  2. 식별자 값으로 1차 캐시에서 엔티티를 조회
  3. 조회한 영속 엔티티에 병합 대상 객체의 값을 밀어 넣는다.
  4. 병합된 영속 엔티티를 반환한다.

주의점