영속성 컨텍스트가 더는 관리하지 않는 엔티티이다.
준영속 엔티티는 JPA가 관리하지 않기 때문에 값을 변경해도 DB에 업데이트가 일어나지 않는다.
@PostMapping(value = "/items/{itemId}/edit")
public String updateItem(@ModelAttribute("form") BookForm form, @PathVariable String itemId) {
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.saveItem(book);
return "redirect:/items";
}
Book
객체는 이미 DB에 저장되었다가 나온 객체여서 식별자 id가 존재한다. 준영속 엔티티를 수정하는 방법
merge
)사용@Transactional
void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티
Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한다.
findItem.setPrice(itemParam.getPrice()); //데이터를 수정한다.
}
@Transactional
void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티
Item mergeItem = em.merge(item);
}
merge()
를 실행한다.mergeMember
)에 member
엔티티의 값을 채워 넣는다. (member
엔티티의 모든 값을 mergeMember
에 밀어 넣는다. 이때 mergeMember
의 “회원1”이라는 이름이 “회원명변경”으로 바뀐다.)mergeMember
를 반환한다.항상 변경 감지를 사용하자!