@OneToMany Delete Not Working

Record For a Better Life ·2024년 1월 4일
0
@Table(name = "post")
public class Post {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "post_id")
    private Long id;

    @OneToMany(mappedBy = "postId", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<File> files;
}

위와 같이 @OneToMany 관계로 설정된 files

문제 코드

        Post post = postRepository.findById(postRequest.getPostId()).get(); // 1

        fileRepository.deleteAllByIdInBatch(postRequest.getDeletedFileId()); // 2

        
        // Post 엔티티를 업데이트하고 반환
        Post newPost = postRepository.save(post); // 3
        

기존 코드를 단순화해보았다

Delete가 제대로 작동하지 않는 이유는 너무나 당연하고 간단했다
(1) post 객체를 미리 가져온 후 (2) File 엔티티를 삭제하게 되면 분명 정상적으로 삭제되는 것을 확인할 수 있지만, post에 관계로 설정되어있던 files이 (3) post가 저장되는 시점에서 다시 새로운 객체로 저장되게 된다. (fileId = 1 -> 2로 변경)
따라서 post.setFiles(null) 과 같이 설정해서 관계를 잠시 끊어주거나, Post 객체를 받아오는 시점을 File이 삭제된 이후로 잡아야 한다.

profile
모든 것을 기록하는 벨로그 💻

0개의 댓글