No Hibernate Session bound to thread, and configuration does not allow creation

lzq0107發表於2012-04-18

JAVA_and_J2EE 2010-08-27 16:26:29 閱讀1028 評論0   字號: 訂閱

異常棧:

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

相關文章