Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 맵
- 우선순위 큐
- 그리디
- java
- 백트래킹
- 분할 정복
- DP
- 이분 탐색
- thymeleaf
- c++
- BFS
- CVE
- 데이크스트라
- error
- 재귀
- 시뮬레이션
- dfs
- dynamic debugging
- web
- 위상 정렬
- 누적 합
- 문자열
- 스택
- Spring
- Reversing
- JPA
- GCP
- 최단 경로
- 구현
- OS
Archives
- Today
- Total
hades
[JPA] 생명주기 일치 시 참조 변경의 위험성 본문
🚨 에러
A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance
🔍 분석
에러를 그대로 해석해보면, cascade="all-delete-orphan" 옵션이 있는 컬렉션이 더이상 엔티티 객체에 의해 참조되지 않는다고 한다.
문제가 발생하는 부분인 Post는 다음과 같다.
@Entity
@Getter
@Setter
public class Post {
@Id
@GeneratedValue
@Column(name = "POST_ID")
private Long id;
private String comment;
@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
private List<UploadFile> imageFiles = new ArrayList<>();
...
// 수정 메서드
public void modifyPost(List<UploadFile> imageFiles, String comment) {
if (!imageFiles.isEmpty()){
this.getImageFiles().removeAll(getImageFiles());
this.setImageFiles(imageFiles);
for (UploadFile imageFile : imageFiles) {
imageFile.setPost(this);
}
}
this.setModifiedTime(LocalDateTime.now());
this.setComment(comment);
}
}
cascade와 orphanRemoval 설정은 imageFiles에 있고, Post애서 imageFiles에 대한 연관관계를 끊어버리면, 자동 삭제 시키기 위해서 사용했다. 글을 수정하는 과정에서 이미지를 변경할 때, 참조 자체를 갈아치웠기 때문에 문제가 발생한다.
👊 해결
// 수정 메서드
public void modifyPost(List<UploadFile> imageFiles, String comment) {
if (!imageFiles.isEmpty()){
this.getImageFiles().removeAll(getImageFiles());
for (UploadFile imageFile : imageFiles) {
this.getImageFiles().add(imageFile);
imageFile.setPost(this);
}
}
this.setModifiedTime(LocalDateTime.now());
this.setComment(comment);
}
참조는 그대로 유지하고, 비운 리스트에 추가하는 방식으로 해결했더니 잘 동작한다.
'🏃🏻♂️ 기본훈련 > Java' 카테고리의 다른 글
[모던 자바 인 액션] 동작 파라미터화 코드 전달하기 (0) | 2024.09.03 |
---|---|
[Java] 자바 기초 (0) | 2024.08.27 |
[JPA] JPA 기초 (0) | 2024.08.02 |
[JPA] not connection (0) | 2024.07.28 |
[Java] 데이터베이스와 참조 (0) | 2024.07.27 |