-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
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
김영한
지식공유자2021.11.08
안녕하세요. skyblue0o0님
기존 item과 id가 겹치는 경우 컬렉션의 데이터를 변경하지 않도록 코드를 작성하셔야 할 것 같아요.
감사합니다.
답변 1