인프런 커뮤니티 질문&답변
변경 감지와 병합 부분 질문 있습니다!
작성
·
189
0
안녕하세요! 강의 듣다가 궁금한 점이 생겨서 질문 드립니다!
itemController의 updateItem 메서드에서
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);
이런식으로 book을 생성하면 준영속 상태라고 말씀하셨는데요.
이는 db에 한번 저장되었던 객체를 꺼내면 무조건 준영속 상태가 되는게 아니라
findOne을 통해 db에서 꺼내온 객체를 넣어준 것이 아니고 단지 new로 객체를 생성하고 파라미터로 받은 form을 통해 값을 넣어 주었기 때문에 준영속 상태라는 것인지 궁금합니다!
답변 2
0
0
안녕하세요. dnjswldb98 님, 공식 서포터즈 codesweaver 입니다.
..
준영속 상태는 영속 상태에서, 영속 관리를 하지 않게 된 상태를 말합니다.말씀하여 주신 new Book() 으로 생성한 객체는 한번도 영속 상태가 된적이 없기에 준영속 상태가 아닌 그냥 객체입니다.
.
JPA를 이용할 경우 DB에 있는 객체를 조회하면 JPA에서 이를 바로 영속 상태로 관리하게 됩니다. 이 객체는 detached 등을 통해 준영속 상태로 바꿀 수 있습니다. 그리고 준영속 상태로 바뀐 객체를 다시 영속 상태로 만들기 위해서는 em.find(객체아이디); 또는 em.merge(객체); 를 사용합니다.
..
감사합니다.





