FetchType.EAGER
을 기권해야하는 경우 몇 가지 규칙이 있습니까?JPA : 언제 eager fetching하면 StackOverflowError가 발생합니까?JPA 프레임 워크 중 일부 (예 : 최대 절전 모드)가 주기적 종속성을 해결해야한다고 들었습니다.
- 프레임 워크에서 릴레이하는 것이 위험 할 때 어떤 조언이 있습니까?
FetchType.EAGER
과 함께StackOverflowError
을 수행하면 항상 프레임 워크에서 버그가 발생합니다 (두 개의 테이블에 3 개의 행이있는 경우).FetchType.EAGER
을 피하기 위해
답변
하나의 이유는 항상 열망 (JOIN FETCH
과) JPQL
에서 수동으로 가져 오는 사용할 수 있습니다,하지만 당신은 FetchType.EAGER
을 설정 한 경우 lazy 페칭을 사용하지 수 있다는 것입니다. EAGER
: 편리한
하지만 느린
사용하여 부모 클래스는 항상 연관 클래스를 필요로 할 때 열망.
LAZY는 :
더 코딩,하지만 훨씬 더 효율적
기본적으로 게으른 로딩은 더 열망 대안에 비해 혜택 (성능, 자원의 사용)가 있습니다. 특정 문제가 발생하지 않는 한 일반적으로 eager fetching을 위해 구성하지 않아야합니다.
당신이 확신하는 경우 - 도메인 인스턴스를 공유
는. (예 : 사용자로 HTTP 세션 범위에 도메인 클래스 인스턴스를 넣어 그것에서 속성을 액세스 할 때 예를 들어) 다른 최대 절전 모드 세션을 건너 인스턴스가 페치 될 때마다 (또는 대부분의 시간에) 특정 관계 속성에 액세스 할 것이므로 eager fetching에 대해이 관계를 구성하는 것이 좋습니다.
예 : 관계 사람과 난 사람 개체를로드 할 때 난 당신이 게으른 유지할 수 있도록 모든 시간을 주소 가져 오기 위해 필요, 여기에 그 필요하지를 주소.
결론
열망 가져 오는 전략은 코드 냄새입니다. 가장 자주 그것은 장기적인 성능 벌칙을 고려하지 않고 단순함을 위해 사용됩니다. 가져 오기 전략은 엔티티 매핑 책임이 될 수 없습니다. 각 비즈니스 유스 케이스는 서로 다른 엔티티로드 요구 사항을 가지므로 페칭 전략을 각 개별 쿼리에 위임해야합니다. 글로벌 페치 계획은 쿼리 단위로 가져 오는 LAZY 연결 만 정의해야합니다. 항상 생성 된 쿼리 생성 전략과 함께 쿼리 기반 페치 계획은 애플리케이션 성능을 향상시키고 비용을 절감 할 수 있습니다.
답변 주셔서 감사합니다, upvoited! 그러나 질문은'StackOverflowError'에 관한 것입니다. 너는 그걸 언급하지 않았어. –
여기에서 답을 참조하십시오 : http://stackoverflow.com/a/39015294/3014866 –
ok thanx buddy .. – Gokul
- 1. 왜 StackOverflowError가 발생합니까?
- 2. Lazy vs Eager with JPA
- 3. ASM Tree API가 InsnList에 삽입되어 StackOverflowError가 발생합니까?
- 4. StackOverflowError가
- 5. JPA 2.1 Eager 가져 오기 속성
- 6. JPA eager 가져 오기가 결과를 반환하지 않음
- 7. JPA OneToMany eager fetch가 작동하지 않습니다.
- 8. JPA - 관계를 언제 사용합니까?
- 9. 브라우저의로드 이벤트는 언제 발생합니까?
- 10. ServerSocket.close(). 언제 예외가 발생합니까?
- 11. 언제 'System.ExecutionEngineException'이 발생합니까?
- 12. Ruby : protect_from_forgery 언제 발생합니까?
- 13. 카테고리는 언제 효력을 발생합니까?
- 14. URL 리디렉션은 언제 발생합니까?
- 15. ASP.NET 인증은 언제 발생합니까?
- 16. WHERE 필터링은 언제 발생합니까?
- 17. 언제 onmouseout가 발생합니까?
- 18. 왜 Groovy JsonBuilder가 Expando를 직렬화하려고 시도 할 때 StackoverflowError가 발생합니까?
- 19. 왜 애니메이션 리스너에서 .cancel()을 호출하면 StackOverflowError가 발생합니까?
- 20. Weblogic에 응용 프로그램을 배포하려고 할 때 StackOverflowError가 발생합니까?
- 21. 딥 복사는 언제 QList에 발생합니까?
- 22. Java의 Thread.sleep은 언제 InterruptedException을 발생합니까?
- 23. 언제 HTTPS 핸드 셰이크가 발생합니까?
- 24. 신호 : 언제 이러한 상황이 발생합니까?
- 25. PL080 DMAC에서 언제 오류가 발생합니까?
- 26. 이 오류 보고서는 언제 발생합니까?
- 27. WPF : 실제로 바인딩이 언제 발생합니까?
- 28. 전역 변수의 초기화는 언제 발생합니까?
- 29. socket.recv()는 예외를 언제 발생합니까?
- 30. 언제 기본 인수 프로모션이 발생합니까?
모든 JPA 제공 업체는 주기적 관계를 열심히로드 할 수 있어야합니다. 어떤 문제라도 JPA 공급자에 대한 버그를 제기해야합니다. –
@ NeeStockStock, 감사합니다! 여기에 귀하의 답변을 참조 : http://stackoverflow.com/a/39015294/3014866 –