Blog

[Spring][JPA]54 고아 Entity 삭제(게시글-댓글)

Category
Author
Tags
PinOnMain
1 more property
CascadeType.REMOVE
CASCADE의 REMOVE 옵션을 적용하면 해당 Entity 객체를 삭제 했을 때 연관된 Entity 객체들을 자동으로 삭제
하지만 REMOVE 옵션 같은 경우 연관된 Entity와 관계를 제거했다고 해서 자동으로 해당 Entity가 삭제 되지는 않는다.
@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, CascadeType.REMOVE}) private List<Food> foodList = new ArrayList<>(); public void addFoodList(Food food) { this.foodList.add(food); food.setUser(this);// 외래 키(연관 관계) 설정 } }
Java
복사
orphanRemoval = true
@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);// 외래 키(연관 관계) 설정 } }
Java
복사
orphanRemoval 옵션도 REMOVE 옵션과 마찬가지로 해당 Entity 즉, Robbie Entity 객체를 삭제하면 연관된 음식 Entity들이 자동으로 삭제된다.
orphanRemoval이나 REMOVE 옵션을 사용할 때 삭제하려고 하는 연관된 Entity를 다른 곳에서 참조하고 있는지 아닌지를 꼭 확인 필요
A와 B에 참조되고 있던 C를 B를 삭제하면서 같이 삭제하게 되면 A는 참조하고 있던 C가 사라졌기 때문에 문제가 발생
따라서 orphanRemoval 같은 경우 @ManyToOne 같은 애너테이션에서는 사용할 수 없다.