미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA list clear 후 add 시 duplicate 에러 문제
안녕하세요, 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);}