Board ( orphanRemoval 속성 적용 ) > SPRING_DATA_JPA

본문 바로가기
사이트 내 전체검색

SPRING_DATA_JPA

Board ( orphanRemoval 속성 적용 )

페이지 정보

profile_image
작성자 관리자
댓글 0건 조회 61회 작성일 24-06-28 11:43

본문

package web.domain;


import java.util.HashSet;

import java.util.Set;


import jakarta.persistence.CascadeType;

import jakarta.persistence.Column;

import jakarta.persistence.Entity;

import jakarta.persistence.FetchType;

import jakarta.persistence.GeneratedValue;

import jakarta.persistence.GenerationType;

import jakarta.persistence.Id;

import jakarta.persistence.OneToMany;

import jakarta.persistence.Table;

import lombok.*;


@Entity

@Data

@ToString(exclude = "imageSet")

@Builder

@AllArgsConstructor

@NoArgsConstructor

@Table(name= "board")

public class Board extends BaseEntity {


@Id // primary key

@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment

private Long bno;


@Column(length = 255, nullable = false) //칼럼의 저장 길이, null 허용 여부

private String title;


@Column(columnDefinition = "TEXT", nullable = false)

private String content;


@Column(length = 20, nullable = false)

private String writer;


//제목, 내용만 수정

public void change(String title, String content) {

this.title = title;

this.content = content;

}


@OneToMany(

mappedBy = "board", //BoardImage의 board변수

cascade = {CascadeType.ALL},

fetch = FetchType.LAZY, //지연 로딩

orphanRemoval = true

)

@Builder.Default

private Set<BoardImage> imageSet =  new HashSet();


public void addImage(String uuid, String fileName) {


BoardImage boardImage = BoardImage.builder()

.uuid(uuid)

.fileName(fileName)

.board(this)

.ord(imageSet.size())

.build();

imageSet.add(boardImage);

}


public void clearImage() {

imageSet.forEach(boardImage -> boardImage.changeBoard(null));


this.imageSet.clear();

}

}





[설명]

현재 cascade 속성이 ALL 로 지정되었기 때문에 상위 엔티티(Board)의 상태 변화가 하위 엔티티(BoardImage)까지 영향을 주긴 하지만 삭제 되지는 않는다.

만일 하위 엔티티의 참조가 더 이상 없는 상태가 되면 @OneToMany( orphanRemoval = true ) 지정해 주어야만 실제 삭제가 이루어 진다. 


테스트 결과

98b80b997774f4410caacf6f89170f9b_1719542684_9765.png
 

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

공지사항
자유게시판
질문답변
1:1문의

 

별명 : 터푸가위
주소 : 부산시 동래구 명장로20번길 90
대표 : 박규태
메일 : dancepkt@******.com

접속자집계

오늘
204
어제
371
최대
10,760
전체
268,577
Copyright © dancePKT . All rights reserved.