No Hibernate Session bound to thread, and configuration does not allow creation of non-transactiona

異常棧:

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是否正確。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章