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

skyblue0o0님의 프로필 이미지
skyblue0o0

작성한 질문수

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

다음으로

JPA list clear 후 add 시 duplicate 에러 문제

작성

·

1.1K

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);
}

 

답변 1

1

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

안녕하세요. skyblue0o0님

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

감사합니다.

skyblue0o0님의 프로필 이미지
skyblue0o0

작성한 질문수

질문하기