inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

다음으로

JPA list clear 후 add 시 duplicate 에러 문제

1186

skyblue0o0

작성한 질문수 1

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

 

jpa duplicate java 웹앱 updateList spring spring-boot JPA

답변 1

1

김영한

안녕하세요. skyblue0o0님

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

감사합니다.

OrderServiceTest 상문주문 테스트 시 update 쿼리 문의

0

40

1

sdk 설정 오류

0

83

2

오탈자 - @Transactional

0

75

1

src/test/resources 테스트 경로 문제

0

75

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

74

1

MemberRepositoryTest 실행오류

0

98

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

204

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

161

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

61

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

90

1

기본 생성자

0

69

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

109

1

멤버서비스테스트 부분에서 막힙니다.

0

188

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

130

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

134

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

126

1

24분 27초 연관관계 편의 메서드 위치

0

120

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

120

2

빌드 툴, Gradle

0

72

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

85

2

Repository에서 EntityManager 주입 방식 차이

0

100

1

롬복과 사용자 정의 setter 메서드

0

79

1

주문 목록 조회 fetch join 질문드립니다

0

93

1

dirty checking 질문드립니다.

0

91

1