em.merge()
실행 merge
는 1차 캐시에 있는 모든 내용을 수정한다.null
로 처리되므로 수정 시 사용이 권장되지 않는다.save
또는 merge
와 같은 메서드를 호출할 필요가 없다.@Transactional
에서 commit
이 일어나게 되고 영속성 컨텍스트가 flush
를 호출한다.flush
update
요청// ItemRepository에 있는 조회 코드 ( 영속상태에 있으면 가져오고 없으면 DB 조회) public Item findOne(Long itemId) { return em.find(Item.class, itemId); } ------------------------------------------------------------ @Transactional public Item updateItem(Long id, ItemForm form) { // id값을 기반으로 해서 실제 영속 상태의 데이터를 찾아온다 Item findItem = itemRepository.findOne(id); findItem.setName(form.getName()); findItem.setPrice(form.getPrice()); findItem.setStockQuantity(form.getStockQuantity()); // 별도의 메서드 호출 없이 데이터가 수정됨 return findItem;
cascade
: 영속성 전이@OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>();