IT

DB에서 캐스케이드 제거와 고아 제거의 차이점은 무엇입니까?

lottoking 2020. 9. 13. 10:53
반응형

DB에서 캐스케이드 제거와 고아 제거의 차이점은 무엇입니까?


차이점은 무엇입니까

@OneToMany(cascade=REMOVE, mappedBy="customer")
public List<Order> getOrders() { ... }

@OneToMany(mappedBy="customer", orphanRemoval="true")
public List<Order> getOrders() { ... }

이 예제는 Java EE Tutorial에서 많은 것이 여전히 세부 사항을 이해하지 못합니다.


에서 여기 :-

계단식 제거

참조 필드를 CascadeType.REMOVE (또는 REMOVE를 포함하는 CascadeType.ALL)로 표시하면 작업이 해당 필드에서 참조하는 엔터티 개체에 자동으로 연결되어야 함을 나타냅니다 (개체 개체는 컬렉션 필드에서 참조 할 수 있음). ).

@Entity
class Employee {
     :
    @OneToOne(cascade=CascadeType.REMOVE)
    private Address address;
     :
}

고아 제거

JPA 2는 @OneToOne 및 @OneToMany 주석의 orphan 제거 요소를 사용하여보다 적극적인 추가 제거 계단식 모드를 지원합니다.

@Entity
class Employee {
     :
    @OneToOne(orphanRemoval=true)
    private Address address;
     :
}

차 :-

두 설정의 차이점은 관계 연결 해제에 대한 응답입니다. 예를 들어 주소 필드를 null 또는 다른 주소 개체로 설정하는 경우입니다.

  • 경우 orphanRemoval = 사실은 연결이 끊긴 주소 인스턴스는 자동으로 제거됩니다. 이것은 소유자 개체 (예 : 직원)의 참조없이 존재하는 존재 안되는 개체 (예 : 주소)를 정리하는 데 유용합니다.
  • cascade = CascadeType.REMOVE지정된 경우 관계 연결 해제는 제거
    작업 이 아니 자동 작업이 수행되지 않는 작업 입니다.

CascadeType.REMOVE의 차이점을 쉽게 수있는 방법 orphanRemoval=true입니다.

고아 제거의 경우 :를 호출 setOrders(null)하면 Order관련가 db에서 자동으로 제거됩니다.

계단식 제거의 경우 : 호출 setOrders(null)하면 Order관련가 db에서 자동으로 제거되지 않습니다 .


마이너스 엔터티와 부모 엔터티가 가정합니다. 부모는 자녀를 번개 할 수 있습니다.

@Entity
class parent {
  //id and other fields
 @OneToMany (orphanRemoval = "true",cascade = CascadeType.REMOVE)
   List<Personnel> myChildernList;
}

orphanRemoval은 ORM 개념이며 마이 고아인지 여부를 알려줍니다. 또한 데이터베이스에서 제거해야합니다.

부모로부터 액세스 할 수없는 마이너스는 고아가됩니다. (myChildernList.remove (i) 사용) null로 설정하거나 새 변경면 (personnelList.set (i, newChild)) 부모는 더 이상 해당 i에서 obj를 제거하거나 (myChildernList.remove (i) 사용) 그리고 아이가 고아가 되었기 때문에 아이는 데이터베이스 제거 될 운명에 처해 있습니다 (즉, 가슴에서 :()

CascadeType.REMOVE는 데이터베이스 수준 개념이며 부모가 제거 여부를 선택 테이블의 모든 관련 레코드를 제거해야 함을 알려줍니다.


실제로 차이점은 데이터를 업데이트 (PATCH) 할 것인지 아니면 데이터를 완전히 대체 할 것인지 (PUT)하는지 여부.

하자 당신이 삭제 말을 customer사용하는 것 cascade=REMOVE보다도 구성하고 유용한 것 같다 그 고객의 주문을 제거합니다.

@OneToMany(cascade=REMOVE, mappedBy="customer")
public List<Order> getOrders() { ... }

당신이 업데이트 이제 가정 해 봅시다 customerorphanRemoval="true"그 이전의 모든 주문을 삭제하고 제공 한 사람과 그들을 대체합니다. ( PUT기준 REST API)

@OneToMany(mappedBy="customer", orphanRemoval="true")
public List<Order> getOrders() { ... }

orphanRemoval보관 명령이 보관 됩니다. ( PATCH기준 REST API)

참고 URL : https://stackoverflow.com/questions/18813341/what-is-the-difference-between-cascade-and-orphan-removal-from-db

반응형