해결된 질문
작성
·
406
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하는지 궁금합니다.
감사합니다
답변 2
2
안녕하세요. Sunny님
첫번째 질문은 고객이 1번 이미지를 삭제하고 4번 이미지를 추가한 것으로 이해됩니다.
2,3번 이미지를 손대지 않았기 때문에 이 경우 1번을 삭제하고 4번을 추가하는 것이 좋은 선택이라 생각합니다.
두번째 질문은 JPA에서는 컬렉션을 다른 컬렉션으로 교체하면 안됩니다. JPA는 이미 있는 컬렉션으로 엔티티가 있는지 없는지, 추가되었는지 관리하기 때문입니다. 교체하게 되면 전혀 의도하지 않은 결과가 나올 수 있습니다.
이경우 전체를 변경하고 싶으면 해당 컬렉션을 remove, clear 등으로 모두 비우시고 엔티티를 추가하면 됩니다.
그런데 이미지 파일 자체를 정교하게 관리하고 싶으면 cascade, orphonRemoval을 빼시고, 이미지 엔티티 전용 리포지토리를 만들어서 관리하는 것도 좋은 방법입니다.
감사합니다.
클라이언트에서 서버로 전송하는 시점에 추가된 이미지, 삭제된 이미지 여부를 함께 보내주면 편리하게 작업하실 수 있을거에요.
감사합니다.