나는 (특히 게으른 로딩을 사용할 때) 최대 절전 모드에서 몇 가지 문제가 발생한다고 여러 번 들었습니다. 가장 공통적 인 것은 무엇이며 그들에 대해 할 수있는 일은 무엇입니까?최대 절전 모드 지연로드를 사용할 때 주요 문제점은 무엇입니까?
답변
가장 일반적인 것은 n+1 select problem입니다. 컬렉션을 지연로드하면 단일 조인 쿼리가 아닌 n + 1 개의 별도 쿼리가 발생합니다.
이러한 문제에 대한 해독제는 상식입니다. 나는 all relevant sources (우선적으로 Hibernate reference)이 해결 방법 및 해결 방법과 함께이 (및 기타 관련) 문제를 광범위하게 논의한다고 생각합니다. 간단히 말해, 조리법에서 맹목적으로 조리법을 복사해서는 안됩니다. 코드의 성능을 측정하고 적절하게 조정하십시오. 발행 된 선택 항목이 너무 많으면 특정 속성/클래스/쿼리에 대한 지연로드에서 조인 또는 하위 선택 가져 오기 전략으로 선택적으로 전환 할 수 있습니다. (이 두 가지 모두 자체적 인 단점이 있으므로 성능 측정이 중요합니다.)
클라이언트 코드가 엔티티/속성의 실제 유형에 따라 달라지는 경우 다른 문제가 발생합니다. instanceof
으로 테스트 해 봅니다. 프록시 객체를 나타내는 프록시 객체를 발견하면 이러한 코드가 중단됩니다. 그러나이 코드는 어쨌든 작성하는 것이 가장 좋은 방법은 아니며, 거의 필요하지 않습니다. 그러나 때로는 레거시 코드로 상속되므로 해결하기가 어려울 수있는 충돌이 발생합니다.
setLazy (false); –
좋아요! 사물의 예는 제가 처음에는 불확실한 것이 었습니다. 고맙습니다. –
분리 객체의 속성을 처음 요청할 때 나타나는 지연로드 예외도 있습니다. 어느 것이 중요합니다! –
로드 할 내용을 의도적으로 지정하는 데 HQL 가져 오기 전략을 사용할 수 있습니다 (예 : Hibernate Reference) :
from Cat as cat inner join fetch cat.mate left join fetch cat.kittens
불행하게도, Hibernate는 프로젝트 요구 사항에 따라 HQL의 일환으로 SQL의 모든 표준 선택 기능을 지원하지 않습니다, 금지 될 수 있습니다. 예를 들어 select from is select는 선택할 수 없지만 보고서를 작성하거나 데이터 분석을 수행하는 데 자주 필요합니다.
이것은 Hibernate의 SQL 실행 기능으로 극복 할 수 있습니다. 그러나이 접근법은 HQL의 객체 지향적 인 장점을 제공하지 않습니다 (예 : 모든 조인은 수동으로 만들어야합니다).
우선 EAGER fetching is a much bigger problem. 게으른 페칭은 필요한만큼의 정보를 가져올 수 있기 때문에 갈 길입니다.
Session
이 열려있는 동안 지연 연결을 초기화하지 않고 지속성 컨텍스트를 닫은 후에 초기화되지 않은 Proxy/Collection을 탐색하려고하면 유일한 문제는 LazyInitializationException
입니다.
N + 1 쿼리 문제는 eager (모든 eager 연관을 명시 적으로 가져 오지 않는 JPQL 쿼리를 실행할 때)와 지연 연결에 대해 발생할 수 있으며 솔루션은 LazyInitializationException
과 동일합니다.
그러나 테스트 중에 모든 N + 1 쿼리 문제를 자동으로 감지 할 수 있습니다. 이 datasource-proxy based utility for more details on this topic을 확인하십시오.
- 1. 최대 절전 모드 -지도의 주요
- 2. 최대 절전 모드를 사용할 때 GWT와 최대 절전 모드 - NoClassDefFoundError
- 3. 복수의 최대 절전 모드
- 4. 최대 절전 모드 프로그램
- 5. 최대 절전 모드
- 6. 까다로운 최대 절전 모드
- 7. 최대 절전 모드 매핑
- 8. 최대 절전 모드 지연로드 및 Hazelcast
- 9. 최대 절전 모드 세션/JDO persistenceManager를 사용할 때 ThreadLocal
- 10. 최대 절전 모드 세션
- 11. 최대 절전 모드 목록
- 12. 최대 절전 모드 설정
- 13. 최대 절전 모드 콜백
- 14. 최대 절전 모드 문제
- 15. 컬럼이있는 최대 절전 모드
- 16. 최대 절전 모드 TypeResolver
- 17. JMockit 최대 절전 모드 에뮬레이션
- 18. 최대 절전 모드 시작이 "최대 절전 모드 자바 지속성"책에서
- 19. 최대 절전 모드 쿼리에서 중복
- 20. 최대 절전 모드 업데이트
- 21. 최대 절전 모드 : 식별자
- 22. ZK로 최대 절전 모드
- 23. 최대 절전 모드
- 24. 최대 절전 모드, MySQL의
- 25. 최대 절전 모드 인코딩
- 26. 최대 절전 모드 검색
- 27. 최대 절전 모드 - 절
- 28. 최대 절전 모드 프록시
- 29. MongoDB와 최대 절전 모드
- 30. 최대 절전 모드
너무 모호합니다. 특정 문제가 있습니까? – skaffman
내 응용 프로그램에서 지연로드를 사용하거나 사용하지 않는 문제. : D 나는 내가 겪어야 할 일을 알고 싶다. –