錯誤爲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被觸發時,發生錯誤,已經有一個線程綁定的會話,並且在事務回滾之前它還沒有關閉。
那麼,它爲什麼報告有no session or session was closed
?
編輯 的相關來源:
@Transactional
public void tcList() {
for (Cat cat : dao.list()) {
System.out.println("Saved cat: " + cat);
}
}
你在JUnit測試用例中運行這個嗎? – 2011-03-17 19:30:17