Blog / 阅读

Hibernate 错误解决(TransactionException: Transaction not successfully started)

by admin on 2014-05-06 16:39:29 in ,



【关键的错误信息】: TransactionException: Transaction not successfully started 和一个 doCommit


从该关键字看,是使用Hibernate事务管理器(而不是Spring,下面详细log的绿色字体)处理事务的commit时抛出的,




【具体解决】:


      //下面的代码段会报错


[java] view plaincopyprint?
Session session =  getSessionFactory().getCurrentSession();    
      <span style="color:#ff0000;"> session.beginTransaction();</span>    
       String queryString = "update.... "; //具体数据库字段内容的更新  
       Query query = session.createQuery(queryString);           
       query.executeUpdate();    
       session.<span style="color:#ff0000;">getTransaction()</span>.commit(); //应该是这里导致了 org.hibernate.TransactionException: Transaction not successfully started  


//改为下面的代码段好了
[java] view plaincopyprint?
Session session =  getSessionFactory()<span style="color:#ff0000;">.openSession();</span>    
       <span style="color:#ff0000;"><strong>Transaction tran =</strong></span> session.beginTransaction();    
       String queryString = "update ....";  
       Query query = session.createQuery(queryString);    
       query.executeUpdate();    
       <strong><span style="color:#ff0000;">tran.commit();</span> </strong>  
       session.close();  




【事后诸葛亮】该错误在dao层的一个执行update的语句里面,但该处没有提示错误,而是在调用这个函数的上一级函数要return时抛出的。


1.  可能是session结束时的检查。


2.  没有申请transaction对象,直接使用函数导致了错误?


3.  而且虽然最后报错,但事实上已经成功的修改了数据库(持久化已经完成)。


4.  生搬硬套固然能快速实现,理解透彻才是正道。


5.  这么改可能会影响执行时间,多数据量时可能需要优化。




附:详细的stacktrace:


org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:660)
Caused by: org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:130)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656)
... 77 more


写评论

相关文章

上一篇:火车头C#插件 处理采集网址规则多级网址获取结果

下一篇:DES加密算法详解- -

评论

写评论

* 必填.

分享

栏目

赞助商


热门文章

Tag 云