Hibernate : 병합이 다 대일 객체와 일시적으로 작동합니까?
-
28-10-2019 - |
문제
안녕하세요, 병합하기 전에 테스트 한 결과 개체가 더 이상 세션에 없을 때 지연 초기화 예외를 방지하는 세션에 개체를 다시 연결합니다.
a.) 몇 가지 질문이 있습니다.
내가 지불하는 경우-> 고객 (다 대일 단방향 관계)과 내가 지불하는 경우
지불 결제= Payment.class.cast (session.merge (oldPayment));
고객 개체도 세션에 다시 연결됩니까, 아니면 고객을 위해 또 다른 병합 호출을해야합니까?
b.) 결제-> 고객 (다 대일 양방향 관계)의 경우 어떻게됩니까?무슨 일이 일어날까요.
c.) 3 개 이상의 계층 관계가있는 경우는 어떻습니까.
예 : 호텔-> 결제-> 고객.
호텔 호텔= Hotel.class.cast (session.merge (unmergeHotel))를 수행하면 결제 및 고객 개체도 세션에 병합됩니까?
감사합니다
해결책
관계의 계단식 옵션으로 정의됩니다.
- 병합 작업을 계단식으로 배열하도록 관계를 구성하면 병합중인 항목에서 참조 된 항목도 병합되므로 병합 전에 이러한 항목에 대한 변경 사항이 데이터베이스에 전파됩니다.
- 그렇지 않으면 이러한 항목이 데이터베이스에서 다시로드되므로 병합 전에 이러한 항목에 대한 모든 변경 사항이 삭제됩니다.
- 초기화되지 않은 지연 관계는 무시됩니다.
JPA 사양의 관련 예외 (네이티브 Hibernate의
Session
인터페이스가 동일한 의미를 제공한다고 생각합니다) : <인용구>- 계열 요소 값이있는 X의 관계에 의해 참조되는 모든 엔티티 Y
cascade=MERGE
또는cascade=ALL
, Y는 Y '로 재귀 적으로 병합됩니다. 참조 된 모든 Y에 대해 X에 의해 X '는 Y'를 참조하도록 설정됩니다. (X가 관리되는 경우 X는 X '.) - X가 다른 엔티티 Y에 대한 참조와 함께 X '에 병합 된 엔티티 인 경우, 여기서
cascade=MERGE
또는cascade=ALL
가 지정되지 않은 경우 X '에서 동일한 연관을 탐색하면 Y와 동일한 영구 ID를 가진 관리 개체 Y '에 대한 참조지속성 공급자는 가져 오지 않은 LAZY로 표시된 필드를 병합해서는 안됩니다. 무시해야합니다. 병합 할 때 이러한 필드.
참조 :
- 계열 요소 값이있는 X의 관계에 의해 참조되는 모든 엔티티 Y
제휴하지 않습니다 StackOverflow