본문 바로가기

Programming

CascadeType = removed, JPA hibernate. 관계된 엔티티가 있는 경우에 삭제 시 참조무결성 에러발생 (SQL Error: 23503, SQLState: 23503)

우선 Cascade 의 뜻은, 종속 / 폭포 같은 의미가 있다.

 

 

 다른 엔티티와 연관관계가 있는 경우, 

 

특히 객체지향 관점에서 상위에 있는 객체의 경우,

 

삭제 등의 행동 시 하위 관련 엔티티 객체들까지 영속성을 부여해주어야 한다.

 

영속 컨텍스트에 있다가 flush 까지 되어 DB 업데이트가 완료 되어야 그 이후 에러가 없는 것으로 보인다.

 

 

CascadeType 으로는 아래와 같이 enum으로 있다.

 

package javax.persistence;

/**
 * Defines the set of cascadable operations that are propagated 
 * to the associated entity.
 * The value <code>cascade=ALL</code> is equivalent to 
 * <code>cascade={PERSIST, MERGE, REMOVE, REFRESH, DETACH}</code>.
 *
 * @since 1.0
 */
public enum CascadeType { 

    /** Cascade all operations */
    ALL, 

    /** Cascade persist operation */
    PERSIST, 

    /** Cascade merge operation */
    MERGE, 

    /** Cascade remove operation */
    REMOVE,

    /** Cascade refresh operation */
    REFRESH,

    /**
     * Cascade detach operation
     *
     * @since 2.0
     * 
     */   
    DETACH
}

 

PERSIST는 저장

REMOVE 는 삭제

 

등 적힌 동작을 할 때 관련 객체까지 상태 전이를 해주는 것이 있고,

 

ALL 을 쓸 때는 잘 고려해서 써야 한다고 한다.

 

안그래도 ALL은 꺼려지는게.. JPA를 처음 써봐서 그런지 충돌이 잘 난다.