오답노트

[Spring JPA] 영속성 전이(Cascade) 와 고아제거속성(orphanRemoval) 본문

Java/Spring

[Spring JPA] 영속성 전이(Cascade) 와 고아제거속성(orphanRemoval)

권멋져 2023. 7. 24. 10:46

영속성 전이 (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