diff --git a/src/main/java/com/back/domain/file/entity/AttachmentMapping.java b/src/main/java/com/back/domain/file/entity/AttachmentMapping.java index 85c2ab1b..104d0f9e 100644 --- a/src/main/java/com/back/domain/file/entity/AttachmentMapping.java +++ b/src/main/java/com/back/domain/file/entity/AttachmentMapping.java @@ -9,8 +9,7 @@ @Getter @NoArgsConstructor public class AttachmentMapping extends BaseEntity { - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "attachment_id") + @OneToOne(fetch = FetchType.LAZY, mappedBy = "attachmentMapping", cascade = CascadeType.ALL, orphanRemoval = true) private FileAttachment fileAttachment; @Enumerated(EnumType.STRING) diff --git a/src/main/java/com/back/domain/file/entity/FileAttachment.java b/src/main/java/com/back/domain/file/entity/FileAttachment.java index 41dfbeb6..5c28bc86 100644 --- a/src/main/java/com/back/domain/file/entity/FileAttachment.java +++ b/src/main/java/com/back/domain/file/entity/FileAttachment.java @@ -29,8 +29,9 @@ public class FileAttachment extends BaseEntity { @JoinColumn(name = "uploaded_by") private User user; - @OneToMany(mappedBy = "fileAttachment", cascade = CascadeType.ALL, orphanRemoval = true) - private List attachmentMappings = new ArrayList<>(); + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "attachmentMapping_id") + private AttachmentMapping attachmentMapping; public FileAttachment( String storedName, diff --git a/src/test/java/com/back/domain/file/repository/AttachmentMappingRepositoryTest.java b/src/test/java/com/back/domain/file/repository/AttachmentMappingRepositoryTest.java new file mode 100644 index 00000000..2ad89066 --- /dev/null +++ b/src/test/java/com/back/domain/file/repository/AttachmentMappingRepositoryTest.java @@ -0,0 +1,54 @@ +package com.back.domain.file.repository; + +import com.back.domain.file.entity.AttachmentMapping; +import com.back.domain.file.entity.EntityType; +import com.back.domain.file.entity.FileAttachment; +import jakarta.persistence.EntityManager; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.transaction.annotation.Transactional; + + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@Transactional +class AttachmentMappingRepositoryTest { + @Autowired + private FileAttachmentRepository fileAttachmentRepository; + @Autowired + private AttachmentMappingRepository attachmentMappingRepository; + @Autowired + private EntityManager em; + + @Test + void AttachmentMapping_삭제시_FileAttachment_자동삭제_확인() throws Exception { + // given + FileAttachment fileAttachment = new FileAttachment( + "test", + new MockMultipartFile("test", "test", "image", "test".getBytes()), + null, + "test.URL" + ); + fileAttachmentRepository.save(fileAttachment); + System.out.println("현재 저장된 파일 개수 : " + fileAttachmentRepository.findAll().size()); + + AttachmentMapping attachmentMapping = new AttachmentMapping( + fileAttachment, + EntityType.POST, + 1L + ); + attachmentMappingRepository.save(attachmentMapping); + + // when + attachmentMappingRepository.deleteAllByEntityTypeAndEntityId(EntityType.POST, 1L); + + em.flush(); // 즉시 DB에 변경사항 반영 + em.clear(); // 영속성 컨텍스트 초기화 + + // then + assertThat(fileAttachmentRepository.findAll().size()).isEqualTo(0); + } +} \ No newline at end of file