오류는 failed to lazily initialize a collection, no session or session was closed
입니다.지연 가져 오기에서 세션 된 오류 발생
거의 같은 질문을하는 사람들이 많이 있지만, 그 해결책은 그리 직관적이지 않습니다. 그리고, 나는 이상한 오류 메시지가 설명하는 또 다른 질문을 게시하는 것이 필요하다고 생각 : (. 너무 오래이기 때문에 여기에 소스 코드를 붙여 않을거야)
을DEBUG [main] (AbstractPlatformTransactionManager.java:365) - Creating new transaction with name [com.bee32.plover.orm.feaCat.FeaturePlayer.tcList]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '' DEBUG [main] (HibernateTransactionManager.java:493) - Opened new Session [[email protected]] for Hibernate transaction DEBUG [main] (HibernateTransactionManager.java:523) - Not preparing JDBC Connection of Hibernate Session [[email protected]] DEBUG [main] (HibernateTemplate.java:397) - Found thread-bound Session for HibernateTemplate Hibernate: /* criteria query */ select ... ERROR [main] (LazyInitializationException.java:42) - failed to lazily initialize a collection, no session or session was closed org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380) ... at java.util.HashSet.<init>(HashSet.java:116) ... at org.hibernate.loader.Loader.list(Loader.java:2124) ... at org.springframework.orm.hibernate3.HibernateTemplate$5.doInHibernate(HibernateTemplate.java:590) ... DEBUG [main] (HibernateTemplate.java:422) - Not closing pre-bound Hibernate Session after HibernateTemplate DEBUG [main] (AbstractPlatformTransactionManager.java:843) - Initiating transaction rollback DEBUG [main] (HibernateTransactionManager.java:672) - Rolling back Hibernate transaction on Session [[email protected]] DEBUG [main] (HibernateTransactionManager.java:734) - Closing Hibernate Session [[email protected]] after transaction
알 수 있듯이 lazy-fetch가 trigged 될 때 오류가 발생했으며 이미 스레드 바운드 세션이 있으며 트랜잭션이 롤백 될 때까지 아직 닫히지 않았습니다.
그럼 왜 no session or session was closed
이보고 되나요?
편집 관련 출처 : 엔티티가 세션 및 수집을로드 할 수 게으른에서 분리 될 수
@Transactional
public void tcList() {
for (Cat cat : dao.list()) {
System.out.println("Saved cat: " + cat);
}
}
JUnit 테스트 케이스에서 실행 중이십니까? –