이 기사는 최대 절전 모드 학습 과정에서 최대 절전 모드의 게으른 부하 문제를 해결하는 네 가지 방법을 요약합니다.
소위 게으른 하중은 하중이 지연되고 하중이 지연됩니다.
게으른 하중을 언제 사용해야합니까? 게으른 하중을 사용하고 싶을 때 게으른 하중을 사용한다고 대답 할 수 있습니다.
게으른로드를 사용해야하는 이유에 대해서는 액세스하려는 데이터의 양이 너무 커지면 메모리 용량이 제한되어 있기 때문에 캐시를 사용하는 것이 적합하지 않다는 것이 분명합니다. 동시성의 양을 줄이고 시스템 리소스의 소비를 줄이기 위해 필요할 때 데이터를로드 한 다음 게으른 하중을 사용합니다.
예를 들어, 직원 인 객체와 부서 인 다른 개체가 있습니다. 분명히, 직원의 경우 부서와 비교하여 다중 관계이며 부서의 경우 직원에 비해 일대일 관계입니다. 직원 개체를 쿼리 할 때 직원 객체의 부동산 부서를 통해 해당 부서를 쿼리하려면 예외가 발생합니다. 이것은 게으른 하중의 존재 때문입니다. 세션이 닫힌 후 최대 절전 모드는 데이터베이스에 대한 또 다른 요청을 발행하고 예외가 발생합니다.
다음은이 문제를 해결하는 네 가지 방법입니다.
1. 명시 적 초기화 (쿼리 메소드 내부)
직원이 어떤 부서에 속한 지 물어 보면 부서를 사전 정체해야합니다.
사용 명세서
Hibernate.initialize (Department.class);
2. 객체 관계 파일을 수정하고 Lazy Lazy = False를 다시 작성하십시오.
위의 두 가지 방법은 실제로 문제를 해결할 수 있지만 단점은 객체를 나중에 사용하든 관계없이 데이터베이스에 SQL 문을 데이터를 요청하여 데이터를 요청하여 불필요한 성능 폐기물을 유발한다는 것입니다.
3. 필터 사용 (웹 프로젝트)
session 세션을 얻는 방법은 getCurrentsession을 사용해야합니다
special 마감 세션 방법
public void dofilter (Servletrequest 요청, ServletRepponse 응답, FilterChain Arg2)는 ioexception, servletexception {// todo 자동 생성 메소드 스터브 세션 = null; 트랜잭션 tx = null; {session = hibernateutil.getCurrentSession (); tx = session.begintransaction (); arg2.dofilter (요청, 응답); // 요청은 지속적으로 tx.commit (); } catch (예외 e) {// todo : (tx! = null) {tx.rollback (); }} 마침내 {// 특수 종료 방법 hibernateutil.closecurrentsession (); }}4. SSH 프레임 워크에서 Spring에서 제공 한 OpenSessionView를 사용하십시오.
원리는이 필터가 스프링에 의해 제공된다는 점을 제외하고 세 번째 방법에서 필터 사용과 유사합니다. 사용하면 다음과 같이 web.xml 파일에서만 구성하면됩니다.
<!-스프링을 사용하여 게으른 로딩 문제를 해결하기 위해-> <filter> <filter-name> OpenSessionInViewFilter </filter-name> <filter-class> org.springframework.orm.hibernate3.support.support.opensessionInViewFilter </filter-mapping> <filter-name> el <url-pattern>/*</url-pattern> </필터 매핑>
3과 4의 방법은 또한 게으른 하중 문제를 해결할 수 있으며, 네 번째 방법은 현재 더 자주 사용됩니다. 그러나이 두 가지 방법에는 단점이 있습니다. 단점은 세션이 닫히고 세션의 수명주기가 더 길어지는 시간을 연장한다는 것입니다. 이 방법을 사용하기 전에 세션은 데이터를 쿼리 한 후 닫았습니다. 이제 세션은 웹 요청이 끝날 때 마감됩니다.
요약
위의 모든 것은 최대 절전 모드의 게으른 부하 문제를 해결하는 네 가지 방법에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!