강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

ㅎㅇㅎㅇㅎㅇ님의 프로필 이미지
ㅎㅇㅎㅇㅎㅇ

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

변경감지와 병합 부분 질문이 있습니다

작성

·

176

0

@Repository
@RequiredArgsConstructor
public class ItemRepository {

    private final EntityManager em;

    public void save(Item item){
        if (item.getId() == null) {
            em.persist(item);
        } else {
            em.merge(item);
        }
    }
}

이 부분에서 질문이 있습니다.

ItemService 부분에서는 itemId와 변경할 데이터를 담은 form객체를 가지고 있습니다.

그러면, merge를 하는게 아닌

new Book()을 하고, book에 itemId를 set하고 form객체에 있는 값들을 넣어주고

단순히 em.merge()를 하는 것이 아닌, 그냥  em.persist(item)를 하면 에러가 나는것 같습니다.

왜 발생하는 건가요?

답변 1

0

안녕하세요, 김선도 님. 공식 서포터즈 codesweaver 입니다.
.
말씀하신것처럼 폼 정보를 이용해 새로운 Book객체를 만들어 persist할 경우, 
데이터베이스에서 중복된 ID를 입력하려고 하는 오류가 발생합니다.

.

이 경우에는 폼 정보에 있는 id값을 이용하여 em.find(id); 를 하여 Book객체를 영속성으로 불러온 뒤, 이 Book객체의 값을 수정하여 '변경감지'를 통해 업데이트 하시면 됩니다.
.
감사합니다.

ㅎㅇㅎㅇㅎㅇ님의 프로필 이미지
ㅎㅇㅎㅇㅎㅇ

작성한 질문수

질문하기