@OnDelete 어노테이션은 JPA에서 제공하는 어노테이션 중 하나로, 연관된 엔티티를 삭제할 때 어떻게 처리할 것인지를 지정할 때 사용됩니다. 이번 글에서는 @OnDelete 어노테이션에 대해 자세히 알아보겠습니다.
@OnDelete 어노테이션
@OnDelete 어노테이션은 연관된 엔티티가 삭제될 때 어떻게 처리할 것인지를 지정할 때 사용됩니다. 이 어노테이션을 사용하면 다른 엔티티와의 관계를 가진 엔티티가 삭제될 때, 그 관계가 끊어진 후 어떤 동작을 수행할지 지정할 수 있습니다.
@Entity
public class Order {
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private Customer customer;
// ...
}
위의 예제에서는 Order 엔티티가 Customer 엔티티와 ManyToOne 관계를 가지고 있습니다. @OnDelete 어노테이션을 사용하여, Customer 엔티티가 삭제될 때 Order 엔티티도 함께 삭제되도록 지정하고 있습니다.
@OnDelete 어노테이션의 속성
@OnDelete 어노테이션에는 다음과 같은 속성이 있습니다.
- action: 관련된 엔티티가 삭제될 때 어떤 동작을 수행할지 지정합니다. 가능한 값으로는 CASCADE, RESTRICT, SET_NULL이 있습니다. CASCADE는 관련된 엔티티도 함께 삭제합니다. RESTRICT는 관련된 엔티티가 삭제되지 않도록 막습니다. SET_NULL은 관련된 엔티티와의 관계를 null로 설정합니다.
@Entity
public class Order {
@ManyToOne
@OnDelete(action = OnDeleteAction.SET_NULL)
private Customer customer;
// ...
}
위의 예제에서는 @OnDelete 어노테이션의 action 속성을 SET_NULL로 지정하여, Customer 엔티티가 삭제될 때 Order 엔티티의 customer 속성을 null로 설정하도록 지정하고 있습니다.
@OnDelete 어노테이션 사용 시 주의사항
@OnDelete 어노테이션을 사용할 때는 다음과 같은 주의사항이 있습니다.
- @OnDelete 어노테이션을 사용하려면 하위 클래스에서 재정의할 수 있는 매핑 방법을 사용해야 합니다.
- @OnDelete 어노테이션은 JPA 2.1 버전부터 지원되는 어노테이션입니다. 따라서 JPA 2.1 이전 버전을 사용하는 경우에는 @OnDelete 어노테이션을 사용할 수 없습니다.
정리
이번 글에서는 Spring Framework에서 제공하는 @OnDelete 어노테이션에 대해 알아보았습니다. @OnDelete 어노테이션을 사용하면 연관된 엔티티가 삭제될 때 어떻게 처리할지를 지정할 수 있습니다. @OnDelete 어노테이션의 action 속성을 사용하여 CASCADE, RESTRICT, SET_NULL 등의 처리 방식을 지정할 수 있습니다. 다만, @OnDelete 어노테이션을 사용할 때는 주의사항을 지켜야 합니다.
'spring > study' 카테고리의 다른 글
[Spring] MockitoExtension에 대해서 알아보자 (0) | 2023.02.18 |
---|---|
[Spring] @EnableWebSecurity 에 대해서 알아보자 (0) | 2023.02.16 |
[Spring] @Query 에 대해서 알아보자 (0) | 2023.02.15 |
[Spring] @Autowired 에 대해서 알아보자 (0) | 2023.02.14 |
[Spring] @Transactional 에 대해서 알아보자 (0) | 2023.02.14 |