IT이야기

CascadeType의 의미는 무엇입니까?@ManyToOne JPA 어소시에이션의 경우 ALL

cyworld 2022. 5. 29. 09:22
반응형

CascadeType의 의미는 무엇입니까?@ManyToOne JPA 어소시에이션의 경우 ALL

제가 캐스케이드의 의미를 잘못 이해한 것 같아요@ManyToOne관계.

케이스:

public class User {

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

}

public class Address {

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

}

의 의미는 무엇입니까?cascade = CascadeType.ALL예를 들어, 데이터베이스에서 특정 주소를 삭제했을 경우, 이 주소를 추가한 사실이cascade = CascadeType.ALL데이터에 영향을 주다User, 내 생각엔?

의 의미CascadeType.ALL지속성이 모든 것을 전파한다는 것이다.EntityManager동작(PERSIST, REMOVE, REFRESH, MERGE, DETACH)를 관련 실체에 제출합니다.

당신의 경우엔 나쁜 생각인 것 같습니다.Address관련 정보를 제거할 수 있습니다.User한 사용자가 여러 주소를 가질 수 있기 때문에 다른 주소는 고립됩니다.단, 대소문자(대소문자:User)가 적절합니다.주소가 1명의 유저에게만 속하는 경우는, 이 유저가 삭제되었을 경우, 유저에 속하는 모든 주소의 삭제를 전파하는 것이 안전합니다.

BTW: A를 추가할 수 있습니다.mappedBy="addressOwner"귀속User결합 컬럼이 ADDRESS 테이블에 있어야 함을 지속성 공급자에게 시그널링합니다.

사용하시면 안 됩니다.CascadeType.ALL@ManyToOne엔티티 상태 전환은 상위 엔티티에서 하위 엔티티로 전파되어야 하며, 그 반대가 되어서는 안 됩니다.

@ManyToOneside는 기본 Foreign Key 열을 매핑하기 때문에 항상 Child Association이 됩니다.

이 때문에, 이 조작을 실시할 필요가 있습니다.CascadeType.ALL에서@ManyToOne에의 어소시에이션@OneToManyside를 사용합니다.mappedBy가장 효율적인 1 대 다 테이블 관계 매핑이기 때문에 속성을 지정할 수 있습니다.

OpenJ의 예는 여기를 참조하십시오.PA 문서 CascadeType.ALL모든 액션을 수행한다는 것을 의미합니다.

견적:

캐스케이드 타입PUSTIVE: 엔티티를 유지할 때는 해당 필드에 있는 엔티티도 유지합니다.EntityManager가 플래시 중에 새로운 엔티티를 참조하는 필드를 발견하여 해당 필드가 CascadeType을 사용하지 않을 경우 이 캐스케이드 규칙을 자유롭게 적용할 것을 권장합니다.PUSTIUST, 에러입니다.

캐스케이드 타입REMOVE: 엔티티를 삭제할 때 이 필드에 있는 엔티티도 삭제됩니다.

캐스케이드 타입새로 고침: 엔티티를 새로 고칠 때 이 필드에 있는 엔티티도 새로 고치십시오.

캐스케이드 타입MERGE: 엔티티 상태를 병합할 때 이 필드에 있는 엔티티도 병합하십시오.

세바스찬

EJB3.0 사양:

캐스케이드 주석 요소의 사용은 관련 엔티티에 조작의 효과를 전파하기 위해 사용될 수 있다.캐스케이드 기능은 일반적으로 부모-자녀 관계에서 사용됩니다.

X가 관리 엔티티인 경우 제거 작업을 수행하면 해당 엔티티가 제거됩니다.X에서 다른 엔티티와의 관계에 캐스케이드=가 주석을 달면 제거 작업이 X에서 참조하는 엔티티에 캐스케이드됩니다.REMOVE 또는 캐스케이드ALL 주석 요소 값.

간단히 말하면 엔티티 는 엔티티와 엔티티로 되어 있습니다.CascadeType.All는 부모에서 발생하는 지속성, 새로 고침, 병합 및 제거 등의 모든 지속성 이벤트를 자식에게 전달합니다. " " " " "CascadeType옵션을 사용하면 개발자는 엔티티 어소시에이션이 지속성을 처리하는 방법을 보다 세밀하게 제어할 수 있습니다.

예를 들어, 페이지 목록이 포함된 오브젝트 북이 있고 이 목록에 페이지 오브젝트를 추가합니다. 경우,@OneToMany은 '책과 페이지의 연관성'으로 됩니다.CascadeType.AllBook을 유지하면 페이지는 데이터베이스에도 유지되게 됩니다.

.0 에서는, 유저 엔티티로부터 , 주소를 가 있는 경우는, 「」를 추가할 수 .orphanRemoval=true)CascadeType.REMOVE에 접속합니다.@OneToMany.

은, 「 」를 참조해 주세요.orphanRemoval=true ★★★★★★★★★★★★★★★★★」CascadeType.REMOVE여기 있습니다.

사용자에게 할당된 주소만 삭제하고 사용자 엔티티 클래스에 영향을 주지 않는 경우 다음과 같은 작업을 수행해야 합니다.

@Entity
public class User {
   @OneToMany(mappedBy = "addressOwner", cascade = CascadeType.ALL)
   protected Set<Address> userAddresses = new HashSet<>();
}

@Entity 
public class Addresses {
   @ManyToOne(cascade = CascadeType.REFRESH) @JoinColumn(name = "user_id")
   protected User addressOwner;
}

이렇게 하면 주석 가져오기 사용에 대해 걱정할 필요가 없습니다.그러나 사용자를 삭제할 때는 사용자 개체에 연결된 주소도 삭제됩니다.

언급URL : https://stackoverflow.com/questions/13027214/what-is-the-meaning-of-the-cascadetype-all-for-a-manytoone-jpa-association

반응형