Spring 및 Hibernate에서 @Lob의 지연 로딩 문제
Spring 및 Hibernate를 활용하는 웹 애플리케이션에서 파일 관련 데이터가 포함된 데이터베이스 레코드는 웹페이지에 렌더링됩니다. 데이터 양이 적당할 때 프로세스는 원활하게 작동하지만 과도한 데이터 양은 "OutOfMemoryError"를 트리거합니다.
초기 문제 해결 단계에서 "blobField" 속성을 "null"로 설정하면 메모리 문제가 해결되어 게으른 메모리 문제가 해결되었습니다. @Basic(fetch=FetchType.LAZY) 주석에도 불구하고 로딩이 효과적이지 않았습니다.
설명 및 해결 방법
Hibernate 문서에 따르면 @Lob 필드는 본질적으로 게으르고 작업을 수행합니다. 명시적인 Lazy 주석이 필요하지 않습니다. 그러나 데이터베이스와 드라이버 전체에서 일관되지 않은 동작이 보고되었습니다.
한 가지 솔루션에는 Javassist 또는 Cglib와 같은 바이트코드 계측 기술이 포함됩니다.
권장 솔루션
이 문제를 안정적으로 해결하려면 데이터 매핑을 재구성하는 것이 좋습니다. 속성을 활용하는 대신 "가짜" 일대일 매핑을 만듭니다. 기본 클래스에서 LOB 필드를 제거하고 동일한 테이블과 기본 키를 참조하지만 필요한 LOB 필드만 포함하는 새 클래스를 설정합니다. 이러한 매핑을 일대일, 선택 가져오기 및 지연 true로 표시합니다. 이 접근 방식은 상위 개체가 세션에 남아 있는 동안 지연 로딩을 보장합니다.
위 내용은 Spring 및 Hibernate에서 @Lob 필드에 대한 지연 로딩이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!