복붙노트

[SPRING] Lazy 로딩과 MVC

SPRING

Lazy 로딩과 MVC

이것이 정확한 복제라면 나에게 정정해라, 나는이 주제가 자주 논의되지만 확실한 답을 찾을 수 없다는 것을 안다.

질문:

MVC 웹 애플리케이션에서 Hibernate 객체를 처리하는 가장 실용적인 솔루션은 무엇입니까?

세부 사항 :

나는 Hibernate를 사용하고 있으며 가능하다면 느슨한 로딩을 원한다. 나는 MVC 스타일 webapp에서 일하고있다. 게으른로드 초기화 예외가 발생하는 것을 싫어합니다. 나는 트랜잭션들 사이에서 Hibernate 객체들을 재 부착하는 것을 싫어한다.

옵션 :

내가 놓친 게 있니? 나는 과장된 생각을 했습니까? 나는 사물을 과소 평가 했습니까?

추신:

웹 프레임 워크의 경우 ZK를 사용하고 있지만 ZK 특정 대답은 실제로 원하지 않습니다. 나는 또한 봄을 사용하고 있으며 봄 특유의 답변으로 멋지다. 유비쿼터스이다.

해결법

  1. ==============================

    1.Use 4-ish -보기에서 열린 세션을 사용하지 말고, 최대 절전 모드 엔티티가 뷰로 끝까지 버블 링되지 않도록하십시오. 대신 변압기가 최대 절전 모드 엔티티와 도메인 오브젝트 또는 '뷰 빈'사이에서 변환하도록하십시오. 그것을하고 싶다.

    Use 4-ish -보기에서 열린 세션을 사용하지 말고, 최대 절전 모드 엔티티가 뷰로 끝까지 버블 링되지 않도록하십시오. 대신 변압기가 최대 절전 모드 엔티티와 도메인 오브젝트 또는 '뷰 빈'사이에서 변환하도록하십시오. 그것을하고 싶다.

    하이버 네이트 엔티티는 도메인 모델이나 UI 표현이 아닌 지속성 전략으로 생각합니다.

  2. ==============================

    2.세 가지 방법이 있습니다.

    세 가지 방법이 있습니다.

    당신의 속성에 대해 열망하는 페치로드를 사용하십시오 : 큰 데이터 테이블을 가지고 있다면 문제가 될 수 있습니다.

    OpenSessionInView라는 필터를 사용하십시오.이 필터는 웹 페이지가 완전히로드 될 때까지 세션을 계속 열어 둡니다. 이로드에서 최대 절전 모드 개체가 요청되면 세션이 열리고 지연로드 예외가 발생하지 않습니다.

    사용자 VO (Valueble 객체) : 애플리케이션에 2 종류의 객체가 있습니다. 지속성과 비즈니스 계층간에 전달할 개체 및 개체보기 레이어입니다. 예 : UserVO 및 UserModel. vo는보기와 비즈니스 계층간에 정보를 전송하는 데 사용됩니다. 비즈니스 구현에서 vo를 사용하여 모델 객체를 채워서 지속성 레이어로 보냅니다. 이 패턴을 사용하면 필요한 모든 정보가 필요할 때 vo 객체에 채워지므로 더 많은 지연로드 예외가 발생하지 않습니다.

    참고 문헌 : OpenSessionInView 열망하는 가져 오기로드 최대 절전 모드 성능 팁

  3. ==============================

    3.프레젠테이션 레이어를 데이터 액세스 레이어와 혼합하면 디자인 문제입니다.

    프레젠테이션 레이어를 데이터 액세스 레이어와 혼합하면 디자인 문제입니다.

    뷰는 컨트롤러를 통해 모델에 액세스해야하지만 Hibernate 객체를 직접 사용하여 레이어를 혼합합니다. IMO 데이터 액세스는 모델 아래 다른 레이어 여야합니다. 엔티티에 xml으로 주석을 달거나 정의하더라도 모델 자체와는 별도입니다.

    Hibernate 로직을 캡슐화하고 컨트롤러에 대한 서비스 계약을 통해 노출시키는 Facade 또는 Manager를 도입하여 해당 엔티티를 나타내는 의미있는 객체를 반환하십시오. 있다면, 나는 옵션 4에 갈 것이다.

  4. from https://stackoverflow.com/questions/14360216/mvc-with-lazy-loading by cc-by-sa and MIT license