오답노트
[Spring JPA] 영속성 전이(Cascade) 와 고아제거속성(orphanRemoval) 본문
영속성 전이 (Cascade)
영속성 전이는 포함하고 있는 속성에 대해 현재 속성이 받는 영향을 전달하는 것이다.
예를 들어 Book 과 Publisher 가 1:N 관계를 가지고 있고, Book을 제거 하면 Publisher도 같이 제거 해야하는데, 그렇게 하려면 쿼리를 두 번 날려야한다.(각각 삭제에 대한 쿼리)
하지만 영속성 전이를 통해 Book이 삭제 될 때, Publisher와 연결되는 Book이 삭제된다면 해당 Publisher도 삭제한다.
@Entity
@NoArgsConstructor
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@DynamicUpdate
public class Book extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String category;
private Long authorId;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@ToString.Exclude
private Publisher publisher;
}
고아속성제거(orphanRemoval)
고아속성제거는 연관 관계가 제거된 데이터가 있으면 이를 제거하는 것을 의미한다.
예를 들어 Book과 Publisher의 관계가 끊어진다면(두 객체는 삭제되지 않음), Publisher는 고아가 되므로 이를 삭제하는 것이 고아속성제거이다.
@Entity
@NoArgsConstructor
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class Publisher extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(orphanRemoval = true)
@JoinColumn(name = "publisher_id")
private List<Book> books = new ArrayList<>();
}
'Java > Spring' 카테고리의 다른 글
[Spring Security] OAuth2 로그인 (0) | 2023.07.28 |
---|---|
[Spring Security] SessionManagementFilter (0) | 2023.07.27 |
[Spring JPA] Entity Relations (0) | 2023.07.19 |
[Spring JPA] Query Method (0) | 2023.07.19 |
[Spring JPA] Auditing (0) | 2023.07.19 |