>Java >java지도 시간 >최대 절전 모드에서 fetch=FetchType.LAZY의 실패한 지연 로딩 처리 예

최대 절전 모드에서 fetch=FetchType.LAZY의 실패한 지연 로딩 처리 예

黄舟
黄舟원래의
2017-09-29 10:24:511609검색

 이 지연 로딩 문제를 해결하기 위한 마지막 접근 방식은 Spring에서 Hibernate용으로 제공하는 지원 클래스를 사용하는 것입니다. 그 주요 의미는 페이지 요청이 시작될 때 Hibernate 세션을 열고 이 세션을 유지하여 Hibernate 세션을 유지하는 것입니다. . 요청이 종료될 때까지 주기가 길어지며 이는 필터를 통해 구현됩니다. 따라서 이제 Hibernate의 지연 로딩 기능을 사용하고 세션의 수명 주기를 연장하고 (액션 레이어를 통해) 페이지에 데이터를 표시하려면 웹에 다음 구성을 추가해야 합니다. xml 파일:


    <!-- 配置Spring的用于解决懒加载问题的过滤器 -->  
     <filter>  
        <filter-name>OpenSessionInViewFilter</filter-name>  
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
     </filter>  
     <filter-mapping>  
        <filter-name>OpenSessionInViewFilter</filter-name>  
        <url-pattern>*.action</url-pattern>  
     </filter-mapping>

참고: 1) OpenSessionInViewFilter는 필터 이름이고, *.action은 모든 작업을 가로채는 것을 의미하거나 /*

  2) 웹 페이지가 아닌 요청(예: 예약된 작업)은 다음과 같은 방법으로 (Hibernate. 초기화(객체 프록시) 메소드는 로딩을 강제하는데, 이는lazy=fals로 동적으로 변경하는 것과 동일합니다)


/**
 * @Author masl - 2017/9/28 14:22
 * @param setRepaymentId
 * @param initSubs :是否初始化关联表数据
 * @return
 */
@Override
public SetRepayment findSetRepaymentById(Integer setRepaymentId, boolean initSubs) {
    SetRepayment setRepayment = null;
    if (setRepaymentId != null) {
        setRepayment = setRepaymentDao.get(setRepaymentId);
        if (setRepayment != null && initSubs) {
            Hibernate.initialize(setRepayment.getSetIncomes());
        }
        return setRepayment;
    }
    return null;
}

위 내용은 최대 절전 모드에서 fetch=FetchType.LAZY의 실패한 지연 로딩 처리 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.