문제

안녕하세요, 병합하기 전에 테스트 한 결과 개체가 더 이상 세션에 없을 때 지연 초기화 예외를 방지하는 세션에 개체를 다시 연결합니다.

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로 표시된 필드를 병합해서는 안됩니다. 무시해야합니다. 병합 할 때 이러한 필드.

      참조 :

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top