Hibernate LazyInitializationException при использовании коллекции на странице Spring JSP
У меня есть такие объекты:
@Entity
@Table(name = "ASSESSMENT")
public class Assessment {
//All other fields..
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "assessment")
@OrderBy(value = "order ASC")
private List assessmentParts = new LinkedList();
public List getAssessmentParts() {
return assessmentParts;
}
//All other getters/setters
}
Другой:
@Entity
@Table(name = "ASSESSMENT_PART")
public class AssessmentPart {
//All other fields
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "ASSESSMENT_ID", nullable = false)
private Assessment assessment;
public Assessment getAssessment() {
return assessment;
}
public void setAssessment(Assessment assessment) {
this.assessment = assessment;
}
//All other getters/setters
}
Части оценки лениво загружаются из объекта оценки. У меня также есть метод пружинного контроллера, который является транзакционным и загружает часть оценки из базы данных:
@Transactional
public void doSomething(String partId, Map model) {
AssessmentPart assessmentPart = //laods a part with entity manager
Assessment assessment = assessmentPart.getAssessment(); //Getting the assessments
model.put("assessmentParts", assessment.getAssessmentParts()); //adding all assessments parts into spring model map
}
Однажды я'Мы добавили части оценки в весеннюю модель, они стали доступны на моей странице JSP, и я использую JSTL для их просмотра:
//Not loading any lazy stuff, just getting an ID of assessment part
Исключение выдается из этой страницы JSP:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: my.package.something.Assessment.assessmentParts, could not initialize proxy - no Session
Как это возможно, если эта коллекция уже была загружена в транзакцию? Я просто пытаюсь перебрать, спящий режим не долженв этот момент ничего не загружается, потому что оно уже загружено. Почему происходит эта странная вещь?