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
엔티티 상태 전환은 상위 엔티티에서 하위 엔티티로 전파되어야 하며, 그 반대가 되어서는 안 됩니다.
그@ManyToOne
side는 기본 Foreign Key 열을 매핑하기 때문에 항상 Child Association이 됩니다.
이 때문에, 이 조작을 실시할 필요가 있습니다.CascadeType.ALL
에서@ManyToOne
에의 어소시에이션@OneToMany
side를 사용합니다.mappedBy
가장 효율적인 1 대 다 테이블 관계 매핑이기 때문에 속성을 지정할 수 있습니다.
OpenJ의 예는 여기를 참조하십시오.PA 문서 CascadeType.ALL
모든 액션을 수행한다는 것을 의미합니다.
견적:
캐스케이드 타입PUSTIVE: 엔티티를 유지할 때는 해당 필드에 있는 엔티티도 유지합니다.EntityManager가 플래시 중에 새로운 엔티티를 참조하는 필드를 발견하여 해당 필드가 CascadeType을 사용하지 않을 경우 이 캐스케이드 규칙을 자유롭게 적용할 것을 권장합니다.PUSTIUST, 에러입니다.
캐스케이드 타입REMOVE: 엔티티를 삭제할 때 이 필드에 있는 엔티티도 삭제됩니다.
캐스케이드 타입새로 고침: 엔티티를 새로 고칠 때 이 필드에 있는 엔티티도 새로 고치십시오.
캐스케이드 타입MERGE: 엔티티 상태를 병합할 때 이 필드에 있는 엔티티도 병합하십시오.
세바스찬
캐스케이드 주석 요소의 사용은 관련 엔티티에 조작의 효과를 전파하기 위해 사용될 수 있다.캐스케이드 기능은 일반적으로 부모-자녀 관계에서 사용됩니다.
X가 관리 엔티티인 경우 제거 작업을 수행하면 해당 엔티티가 제거됩니다.X에서 다른 엔티티와의 관계에 캐스케이드=가 주석을 달면 제거 작업이 X에서 참조하는 엔티티에 캐스케이드됩니다.REMOVE 또는 캐스케이드ALL 주석 요소 값.
간단히 말하면 엔티티 는 엔티티와 엔티티로 되어 있습니다.CascadeType.All
는 부모에서 발생하는 지속성, 새로 고침, 병합 및 제거 등의 모든 지속성 이벤트를 자식에게 전달합니다. " " " " "CascadeType
옵션을 사용하면 개발자는 엔티티 어소시에이션이 지속성을 처리하는 방법을 보다 세밀하게 제어할 수 있습니다.
예를 들어, 페이지 목록이 포함된 오브젝트 북이 있고 이 목록에 페이지 오브젝트를 추가합니다. 경우,@OneToMany
은 '책과 페이지의 연관성'으로 됩니다.CascadeType.All
Book을 유지하면 페이지는 데이터베이스에도 유지되게 됩니다.
.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
'IT이야기' 카테고리의 다른 글
(VUE/VUEX) API 호출에서 데이터 가져오기 및 해석에 관한 베스트 프랙티스 (0) | 2022.05.29 |
---|---|
자바에서 int[]를 목록으로 변환하는 방법 (0) | 2022.05.29 |
vue/vuex에서 편집 저장 또는 취소 (0) | 2022.05.28 |
Android 폰에서 방향 확인 (0) | 2022.05.28 |
C에 내포된 함수 (0) | 2022.05.28 |