> Java > java지도 시간 > @ManyToOne JPA 연관에서 언제 CascadeType.ALL을 사용해야 합니까?

@ManyToOne JPA 연관에서 언제 CascadeType.ALL을 사용해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-15 04:15:02
원래의
698명이 탐색했습니다.

When Should You Use CascadeType.ALL in @ManyToOne JPA Associations?

@ManyToOne JPA 연관에 대한 CascadeType.ALL 이해

JPA의 컨텍스트에서 @ManyToOne 주석은 일대다 관계를 정의합니다. 엔터티 간. CascadeType.ALL은 상위 엔터티에 적용된 모든 지속성 작업이 하위 엔터티에 전파되어야 함을 지정하는 계단식 유형입니다.

다음 샘플 코드를 고려하세요.

public class User {

   @OneToMany(fetch = FetchType.EAGER)
   protected Set<Address> userAddresses;

}

public class Address {

   @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
   protected User addressOwner;

}
로그인 후 복사

이 경우 , Address 클래스의 @ManyToOne은 주소가 단일 사용자와 연결되어 있음을 나타냅니다. cascade = CascadeType.ALL은 사용자 인스턴스가 삭제되면 모든 관련 주소(주소 인스턴스)도 데이터베이스에서 삭제되도록 지정합니다.

이 계단식 동작은 유익할 수도 있고 위험할 수도 있습니다.

  • 이점: 상위 엔터티가 삭제되면 연결된 엔터티도 자동으로 제거되어 데이터가 유지됩니다. 무결성.
  • 위험: 상위 항목에 연결된 하위 항목이 여러 개 있는 경우 상위 항목을 삭제하면 제거하면 안 되는 하위 항목이 실수로 삭제될 수도 있습니다.

위의 예에서 사용자에게 여러 개의 주소가 있는 경우 사용자를 삭제하면 일부 주소가 다른 사용자에게 속한 경우에도 해당 주소도 모두 삭제됩니다. 이를 방지하려면 주소에서 사용자로 반대 방향으로 캐스케이드하는 것이 더 적절할 것입니다. 이렇게 하면 주소를 삭제하면 데이터베이스에서 해당 특정 주소만 제거되고 연결된 사용자는 그대로 유지됩니다.

또한 조인 이름을 지정하기 위해 @ManyToOne 관계에 mappedBy 속성을 포함하는 것이 좋습니다. 하위 테이블의 열입니다. 위의 예에서는 Address 클래스에 mappedBy="addressOwner"를 추가하여 Address 테이블의 조인 열 이름이 "addressOwner"임을 나타낼 수 있습니다.

위 내용은 @ManyToOne JPA 연관에서 언제 CascadeType.ALL을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿