Projects/[Spring] Code Refactoring Project

[Spring Plus] JPA Cascade 옵션 지정하기

montmer27 2026. 2. 28. 22:07

상황

  • 할 일을 새로 저장할 시, 할 일을 생성한 유저는 담당자로 자동 등록되어야 합니다.
  • JPA의 cascade 기능을 활용해 할 일을 생성한 유저가 담당자로 등록될 수 있게 해주세요.

해결 방법

하나의 할일은 여러 담당자를 가진다(리스트 형태). 따라서 할일이 생성될 때 할일을 생성한 사용자는 managers라는 list에 add 되어야 한다.

 

할 일이 생성될 때만 유저를 담당자 리스트에 넣어주면 되므로,  @OneToMany의 Cascade 옵션을 Cascade = Cascade.PERSIST로 지정해주자.

 

속성 값 설명
Cascade.ALL 모든 변경(저장, 병합, 삭제, 재로딩)이 관련 엔티티에 적용됩니다.
Cascade.DETACH 엔티티가 detach 상태로 변경될 때, 관련 엔티티도 함께 변경됩니다.
Cascade.MERGE 현재 엔티티의 상태를 데이터베이스에 반영할 때, 관련 엔티티도 함께 반영됩니다.
Cascade.PERSIST 엔티티를 데이터베이스에 저장할 때, 관련 엔티티도 함께 저장됩니다.
Cascade.REFRESH 엔티티를 데이터베이스로부터 새로운 정보로 갱신할 때, 관련 엔티티도 함께 갱신됩니다.
Cascade.REMOVE 엔티티를 삭제할 때, 관련 엔티티도 함께 삭제됩니다

출처: https://adjh54.tistory.com/477

 

[Java/JPA] Spring Boot Data JPA 엔티티 어노테이션 이해하기 -2 : 엔티티(테이블)간의 관계

해당 글에서는 Spring Boot JPA에서 엔티티 어노테이션 중 테이블 간의 관계에 사용되는 어노테이션에 대해 알아봅니다   💡 [참고] JPA 관련해서 구성 내용에 대해 궁금하시면 아래의 글을 참고하

adjh54.tistory.com

출처: https://docs.oracle.com/javaee/7/api///javax/persistence/CascadeType.html

 

CascadeType (Java(TM) EE 7 Specification APIs)

All Implemented Interfaces: Serializable, Comparable public enum CascadeType extends Enum Defines the set of cascadable operations that are propagated to the associated entity. The value cascade=ALL is equivalent to cascade={PERSIST, MERGE, REMOVE, REFRESH

docs.oracle.com

 

해결 확인

확인을 위해 로그인 후 할일을 저장해 보자. 현재 로그인한 userId는 1이다.

아래와 같이 할일을 저장하는 API 요청을 보내면

 

DB에 아래와 같이 할일이 추가되었고, user_id도 1로 잘 저장되었다.