우선 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를 처음 써봐서 그런지 충돌이 잘 난다.