Hibernate의 "역할 컬렉션을 지연 초기화하지 못했습니다" 예외는 액세스를 시도할 때 발생할 수 있습니다. 세션 컨텍스트 외부에서 느리게 로드되는 컬렉션입니다. 이 문제를 해결하려면 특정 시나리오를 자세히 살펴보겠습니다.
제공된 코드는 Comment 모델로 매핑된 Topic 모델의 @OneToMany 관계를 정의합니다. 컨트롤러에서 Topic 인스턴스와 해당 설명을 검색합니다. 그런 다음 JSP 보기는 주석을 반복하여 표시합니다. 그러나 댓글 컬렉션은 기본적으로 지연 로드되기 때문에 예외가 발생합니다.
이 문제를 해결하려면 다음 두 가지 옵션이 있습니다.
1. 즉시 로드:
즉시 로딩을 사용하려면 주제의 댓글 필드 매핑을 업데이트하세요.
@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL) private Collection<Comment> comments = new LinkedHashSet<>();
즉각 로딩을 사용하면 주제가 로드될 때 댓글 컬렉션이 초기화되어 예외.
2. 오픈 세션을 사용한 지연 로딩:
또는 댓글 컬렉션을 지연 로딩으로 유지할 수 있지만 댓글에 액세스할 때 Hibernate 세션이 열려 있는지 확인하세요.
컨트롤러에서:
Topic topicById = service.findTopicByID(id); // Start a new Hibernate session Session session = sessionFactory.getCurrentSession(); Collection<Comment> commentList = topicById.getComments(); // Close the session once done session.close(); // Pass the commentList to the view //...
다음에서 새 세션을 엽니다. 컨트롤러, Hibernate는 주석 컬렉션을 초기화하는 데 필요한 컨텍스트를 가지고 있습니다. 완료되면 세션을 명시적으로 닫는 것을 잊지 마세요.
즉시 로딩은 대규모 컬렉션의 성능에 영향을 미칠 수 있으므로 애플리케이션 요구 사항에 가장 적합한 접근 방식을 선택하세요.
위 내용은 Hibernate의 \'역할 모음을 지연 초기화하지 못했습니다\' 예외를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!