異常棧:
Java代碼
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:622)
at org.springside.modules.orm.hibernate.SimpleHibernateDao.getSession(SimpleHibernateDao.java:90)
at org.springside.modules.orm.hibernate.SimpleHibernateDao.createCriteria(SimpleHibernateDao.java:284)
at org.springside.modules.orm.hibernate.SimpleHibernateDao.findUniqueBy(SimpleHibernateDao.java:165)
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:622)
at org.springside.modules.orm.hibernate.SimpleHibernateDao.getSession(SimpleHibernateDao.java:90)
at org.springside.modules.orm.hibernate.SimpleHibernateDao.createCriteria(SimpleHibernateDao.java:284)
at org.springside.modules.orm.hibernate.SimpleHibernateDao.findUniqueBy(SimpleHibernateDao.java:165)使用SessionFactory.getCurrentSession執行hibernate操作時,hibernate的操作默認必須包含在一個transaction中,也就是開始要用session.begionTransaction得到一個transaction 實例(譬如tx), 操作結束時在這個實例上進行事務的提交tx.commit或回滾tx.rollback.
如果這些CRUD操作不被包括在一個具體的transaction中,hibernate就會拋出上述異常。
在實際的SSH web應用開發中,我們通常用spring來進行事務的管理。我們一般不會在dao層使用transaction,事務被配置在service層上更爲合理,因爲業務層方法表示邏輯上的一個原子操作。在這種環境下,如果你遇到上述異常,請覈查一下service層上有沒有配置transaction,transaction有沒有打開,service層配置的transaction是否正確。