inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

JPA Update에 관한 질문입니다.

해결된 질문

549

Sunny

작성한 질문수 8

0

안녕하세요 김영한님! 제가 드리고싶은 질문은 두가지입니다.

예를 들어 게시글에는 이미지를 넣을 수 있으며 게시글과 이미지는 OneToMany관계로 이루어져있습니다.

그리고 Board(게시글) 엔티티에는 

@OneToMany(mappedBy = "board", Cascade.ALL, orphonRemoval = true, fetch = LAZY)

List<BoardImage> images = new ArrayList<>();

로 설정했습니다.

질문1.

예를 들어 이미지가 [image1, image2, image3](타입은 이미지객체타입) 에서

[image2, image3, image4] 로 update 할 경우에는

1. delete all & insert all 

2. 코드로 기존과 하나하나 비교하면서 delete1 & insert 4 인가?

주로 현업에서는 어떻게 사용하는지 궁금합니다.

질문2.

List<BoardImage> images = [image1, image2, image3] 을 갖고 있습니다. 여기서 update 메소드를 사용하여

this.images = List.of(image1, image3, image4)로 덮을경우에는 JPA에서 전부 delete하는지 궁금합니다.

감사합니다

update jpa JPA java

답변 2

2

김영한

안녕하세요. Sunny님

첫번째 질문은 고객이 1번 이미지를 삭제하고 4번 이미지를 추가한 것으로 이해됩니다.

2,3번 이미지를 손대지 않았기 때문에 이 경우 1번을 삭제하고 4번을 추가하는 것이 좋은 선택이라 생각합니다.

두번째 질문은 JPA에서는 컬렉션을 다른 컬렉션으로 교체하면 안됩니다. JPA는 이미 있는 컬렉션으로 엔티티가 있는지 없는지, 추가되었는지 관리하기 때문입니다. 교체하게 되면 전혀 의도하지 않은 결과가 나올 수 있습니다.

이경우 전체를 변경하고 싶으면 해당 컬렉션을 remove, clear 등으로 모두 비우시고 엔티티를 추가하면 됩니다.

그런데 이미지 파일 자체를 정교하게 관리하고 싶으면 cascade, orphonRemoval을 빼시고, 이미지 엔티티 전용 리포지토리를 만들어서 관리하는 것도 좋은 방법입니다.

감사합니다.

0

Sunny

2번질문 답변 정말로 감사드립니다.

1번질문 정리하여 이해한다면 모두다 지우고 바꾸기 보다는 하나하나 비교한다음에 삭제하고 추가하란 말씀이시죠?

그렇다면 만약 바뀔 대상이 너무 많거나 또는 전부 다바꿔야할때는 어떻게 하나요? 그럴 때도 비교해가면서 update를 실시(비교하고 같으면 남기기, 다르면 삭제, 그리고 추가)해야하는지 궁금합니다.

0

김영한

클라이언트에서 서버로 전송하는 시점에 추가된 이미지, 삭제된 이미지 여부를 함께 보내주면 편리하게 작업하실 수 있을거에요.

감사합니다.

0

Sunny

압도적으로 감사합니다 흑흑

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

22

2

inheritance startegy 선택시 고려사항

0

21

1

Entity 동등성 비교

0

18

1

실무 조언 관련 질문입니다.

0

44

1

H2데이터베이스 파일 생성

0

56

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

52

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

51

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

92

2

UnsupportedOperationException 발생

0

85

3

H2 Database 연결이 안됩니다.

0

92

2

연관관계 매핑 질문드립니다.

0

85

2

h2데이터베이스 실행오류

0

107

2

persistence.xml

0

106

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

80

1

영속성 컨텍스트

0

65

1

JPA 프록시

0

94

1

Native Query와 MyBatis

0

68

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

85

1

임베디드 타입 예시 코드 관련 질문

0

114

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

94

3

인텔리제이 패키지 커서 단축키 질문

0

108

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

143

1