강의

멘토링

로드맵

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

skyblue0o0님의 프로필 이미지
skyblue0o0

작성한 질문수

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

다음으로

JPA list clear 후 add 시 duplicate 에러 문제

작성

·

1.2K

0

안녕하세요, JPA 사용 중에 막히는 부분이 있어 질문 드립니다.
 
entity 내에 updateItems() 함수가 있는데요, 해당 함수에서는 기존의 items를 clear하고 새로운 items를 addAll로 추가합니다. (아래 코드 참고해주세요.)
이 때 기존 item과 id가 겹치는 item이 추가될 경우 DB 레벨에서 duplicate primary key 에러가 나는데요, 찾아보니 insert 쿼리 실행 후 delete 쿼리가 날아가기 때문에 해당 에러가 발생한다는 것을 알았고, clear() 후 명시적으로 flush()를 날리면 해결된다는 것을 알았습니다. 그럼 updateItems() 함수 안에 repository.flush() 코드를 추가해야 하는데, entity 내의 함수라서 repository가 entity 안으로 들어오면 안될 것 같습니다...
이 경우, ID가 겹치는 item들은 remove&add 하지 않는다거나, entity에서 updateItems() 함수를 지우고 service 단에서 처리하는 방법 이외에 해결방법이 있을까요...??
 
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Item> items = new ArrayList<>();
public void updateItems(List<Item> items) {
this.items.clear();
this.items.addAll(items);
}

 

퀴즈

회원 가입 시 화면 입력 데이터를 엔티티 객체 대신 별도의 Form 객체로 받는 주된 이유는 무엇일까요?

데이터베이스 성능을 최적화하기 위해서

화면 종속적인 데이터나 유효성 검증 로직을 분리하기 위해서

JPA 영속성 컨텍스트와 직접적인 관계를 맺기 위해서

코드의 자동 생성 기능을 활용하기 위해서

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. skyblue0o0님

기존 item과 id가 겹치는 경우 컬렉션의 데이터를 변경하지 않도록 코드를 작성하셔야 할 것 같아요.

감사합니다.

skyblue0o0님의 프로필 이미지
skyblue0o0

작성한 질문수

질문하기