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 |
Tags
- aws #클라우드 #퍼블릭 클라우드 #아키텍트 #과정
- storage #로컬스토리지 #세션스토리지 #백그라운드 서비스
- virtualbox #vmware #router #nat #pat #네트워크 구성도 #aws #ubuntu #
- ubuntu #설정변경 #vmware #vmbox #linux #명령어
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #internet gateway #연결
- aws #아키텍트 #과정 #vpc #인프라 구축
- sasac #aws 클라우드 #아키텍트 과정 #가상화 #vmbox #vmware #esxi #tar #selinux
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #route53 #igw #연결
- 비트 #바이트 #이진수
- haproxy #wordpree #php #linux #가상화 #가상머신 #내용정리
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- 프로세스 #CPU #시공유 #커널
- 인바운드 #아웃바운드 #방화벽설정
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #private subnet
- aws #아키텍트 #과정 #s3 #bucket #생성 #이미지업로드
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- oracle vmbox #rocky #linux9 #명령어 #암호화인증 #해시알고리즘
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 서브넷 #안에 #ec2 인스턴스 #ami #생성 #firewall
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #igw #curl #명령어 #http
- tar #build #배포 #통신포트 #설정방법 #linux #apache
- samba #가상머신 #daemon
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- mysql #linux #설정 #wordpress #웹사이트 #db 연결 #
- 쓰레드 #쓰레드풀 #프로세스
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 #보안그룹 #생성 #http #ipv4
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #웹페이지 #http #public #instance
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
Archives
- Today
- Total
요리사에서 IT개발자로
스파르타 부트캠프 Spring Master 3강 고아Entity 삭제(orphanRemoval) 본문
CACADE의 REMOVE옵션을 적용하면
해당 Entity 객체를 삭제할 때 연관된 Entity 객체들을 자동 삭제할 수 있다.
https://hs-backend.tistory.com/166
REMOVE 옵션같은 경우 연관된 Entity를 제거했다해서
자동으로 해당 User Entity가 삭제되지 않는다?
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "user",cascade = {CascadeType.PERSIST,CascadeType.REMOVE})
private List<Food> foodList = new ArrayList<>();
public void addFoodList(Food food) {
this.foodList.add(food);
food.setUser(this); //외래키 설정
}
}
Robbie의 user_id 는 1
Food 테이블에서 Robbie가 주문한 음식들은
고구마피자, 아보카도피자, 후라이드 치킨이다.
@Test
@Transactional
@Rollback(value = false)
@DisplayName("연관관계 제거")
void test1() {
// 고객 Robbie 를 조회합니다.
User user = userRepository.findByName("Robbie");
System.out.println("user.getName() = " + user.getName());
// 연관된 음식 Entity 제거 : 후라이드 치킨
Food chicken = null;
for (Food food : user.getFoodList()) {
if(food.getName().equals("후라이드 치킨")) {
chicken = food;
}
}
if(chicken != null) {
user.getFoodList().remove(chicken);
}
// 연관관계 제거 확인
for (Food food : user.getFoodList()) {
System.out.println("food.getName() = " + food.getName());
}
}
실행을하면 후라이드 치킨이 삭제되고 연관관계도 삭제되어야하는데....
연관관계는 제거했으나
데이터는 그대로 남아있다?
JPA에서는 이를 간편하게 처리할 수 있도록
orphanRemoval옵션을 제공한다.
@OneToMany(mappedBy = "user",cascade = CascadeType.PERSIST,orphanRemoval = true)
orphanRemoval옵션 추가 코드
package com.sparta.jpaadvance.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Setter
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "user",cascade = CascadeType.PERSIST,orphanRemoval = true)
private List<Food> foodList = new ArrayList<>();
public void addFoodList(Food food) {
this.foodList.add(food);
food.setUser(this); //외래키 설정
}
}
삭제 테스트 코드를 변경하지 않고 실행을 하면
Delete가 수행되어 후라이드 치킨데이터가 삭제된다.
orphanRemoval옵션도
REMOVE 옵션과 마찬가지로 Robbie Entity를 삭제하면
연관 Food Entity가 자동삭제된다.
orphanRemoval이나 REMOVE옵션 사용하면
연관된 Entity가 다른 곳에서 참조하고있는지 아닌지를 확인해야 한다.
A는 B,C 연관관계
B는 C를 연관 할때
B를삭제하면 C도삭제된다.
A는 C도 B도없다.
orphanRemoval같은 경우 @ManyToOne같은 에너테이션에서 사용할 수없다.
반응형
'Spring' 카테고리의 다른 글
스파르타 부트캠프 SpringBoot JWT인증, 인가 (0) | 2024.06.05 |
---|---|
스파르타 부트캠프 SpringBoot @Validation란 (0) | 2024.05.31 |
스파르타 부트캠프 Spring Master 3강 영속성 전이 (0) | 2024.05.29 |
스파르타 부트캠프 Spring Master 3강 지연로딩과 즉시로딩 (0) | 2024.05.29 |
스파르타 부트캠프 Spring Master 3강 Entity @ManyToMany와 중간테이블 (0) | 2024.05.28 |