이 문제는 고전적인 것으로 알고 있지만 어떻게 든이 문제를 해결할 방법을 찾지 못했습니다. 핸들러 방식의 컨트롤러 어딘가에JSP에서 개체의 OneToMany 목록에 액세스 할 때 LazyInitializationException이 발생했습니다.
@OneToMany(cascade=CascadeType.ALL, mappedBy = "a")
public Set<B> getBList() {
return this.bList;
}
, 내가
같은 것을 가지고 그래서 나는 두 개의 엔티티, A와 B 다음과 같은 방법이 AI에사이 OneToMany 관계가
@RequestMapping("/")
public String method(Model model){
A a = aDAO.findById(1);
for(B b : a.getBList()){
System.out.println(b);
}
model.addAttribute("a",a);
}
및 JSP 페이지 내가 가지고있는 다음 EL :
${a.bList}
핸들러 메서드에서 모든 것이 제대로 작동하고 A 객체가 가진 B 객체 목록이 콘솔에 제대로 표시됩니다.
그러나 JSP 페이지의 렌더링에서의 LazyInitializationException이 나타납니다 :org.hibernate.LazyInitializationException는 : com.entities.A.bList, 아니 세션 또는 세션 : 게으르게 역할의 컬렉션을 초기화하지 못했습니다 닫혔다
나는 A가 획득 된 세션이 그동안 폐쇄 되었기 때문에이 예외가 보통 나타납니다 (내가 틀렸다면 수정하십시오). 그러나 DAO 클래스의 findById (Long id) 메서드에서 세션을 닫지 않습니다. 그리고 그것이 처리기 메서드에서 인쇄가 작동하는 이유입니다. 그렇다면 왜 EL에 의해 예외가 생겼습니까? 세션이 JSP 페이지의 해석에서 닫히지 않았습니까?
또한 EL에서 목록에 액세스하려면 어떻게해야합니까?
[Solve "롤 지연 컬렉션을 초기화하지 못했습니다."(http://stackoverflow.com/questions/11746499/solve-failed-to-lazily-initialize-a-collection-of-role) -exception) –
DAO findById 메소드에 @Transactional 속성을 추가 했습니까? –
예, @JekinKalariya, 효과가있었습니다. 고맙습니다. 이 주석이 실제로 무엇을 검색 할 것입니다. –