UI에서 사용하기 전에 Hibernate 객체 그래프를 로드하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/79843

  •  09-06-2019
  •  | 
  •  

문제

상황은 이렇습니다.

  • 게으른 하중이 정의 된 객체 그래프가있는 최대 절전 모드 컨텍스트가 있습니다.
  • 어딘가에 데이터를 복사하지 않고도 UI의 최대 절전 모드 객체를 사용하려고합니다.
  • 다른 양의 데이터가 필요한 다른 UI 컨텍스트가 있습니다.
  • 데이터가 너무 커서 매번 전체 그래프를 간절히로드 할 수 없습니다.

더 많은 데이터를 로드하기 위해 데이터베이스로 돌아갈 필요 없이 액세스할 수 있도록 구성 가능한 방식으로 개체 그래프의 모든 적절한 개체를 로드하는 가장 좋은 방법은 무엇입니까?

어떤 도움이라도.

도움이 되었습니까?

해결책

당신이 클라이언트가 있고 어느 시점에서 그의 주문에 대해 뭔가를 해야 하고 아마도 그는 그의 주문에 대한 보너스를 가지고 있다고 가정해 봅시다.

그런 다음 다음과 같이 말할 수 있는 유연한 인터페이스를 사용하여 저장소를 정의합니다.

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

그리고 거기에는 필요한 모든 것을 갖춘 클라이언트가 있습니다.현재 작업에 필요한 것이 무엇인지 미리 아는 것이 바람직합니다.이렇게 하면 원치 않는 데이터베이스 이동을 피할 수 있습니다. (팀의 새로운 개발자는 일반적으로 이 작업을 수행합니다. 속성을 호출하고 실제로 DB에 대한 호출이라는 사실을 인식하지 못합니다.)

다른 팁

웹앱이고 Spring을 사용하고 있다면 OpenSessionInViewFilter가 문제에 대한 해결책이 될 수 있습니다.

우리 프로젝트에서 사용하는 접근 방식은 보유한 각 보기에 대한 서비스를 만드는 것입니다.그런 다음 뷰는 이 특정 뷰에 필요한 하위 그래프를 가져오며 항상 데이터베이스로 보내는 SQL 수를 줄이려고 노력합니다.따라서 우리는 n:1 관련 객체를 얻기 위해 많은 조인을 사용하고 있습니다.

DB에 직접 연결된 2계층 데스크톱 앱을 사용하는 경우 개체를 연결된 상태로 두고 언제든지 자동으로 추가 데이터를 로드할 수 있습니다.그렇지 않으면 세션에 다시 연결하고 필요한 연결을 초기화해야 합니다. Hibernate.initialize(Object entity, String propertyName)

(메모리 부족으로 100% 정확하지 않을 수도 있음)

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