• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JPA list clear 후 add 시 duplicate 에러 문제

21.11.08 21:32 작성 조회수 797

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가 겹치는 경우 컬렉션의 데이터를 변경하지 않도록 코드를 작성하셔야 할 것 같아요.

감사합니다.