环境:
数据库:SQL SERVER 2000
服务器:Tomcat
开发技术:Jsp,Hibernate
问题:在Session.beginTransaction()后出现transaction not successfully started
事务不能开启的问题
整个代码非常简单,就是一个 实体类,用Dao保存到数据库,再没有使用其它的技术
Dao是自己写的
public void add(T bean)
{
Session session = HibernateSessionFactory.getSessionFactory().openSession();
try {
session.beginTransaction();
session.persist(bean);
session.getTransaction().commit();
}
catch (RuntimeException e) {
session.getTransaction().rollback();
throw e;
}
finally {
session.close();
}
}
这个代码在以前类似的环境中使用过,没出现问题.
但这次怎么都不行,总是报 事务不能成功启动的异常.
试着在Hibernate中加入了C3p0连接池,异常依旧.
百度一下,有的说是可能存在事务的嵌套,有的说是其它的原因,
current_session_context_class 配置为thread,异常依旧.
试试不开新Session吧.直接用HibernateSessionFactory.getSession();试试,
没想到一下通过了.
HibernateSessionFactory.getSession();方法是从当前纯程中取Session,如果当前线程中没有Session,它会新建一个Session放到当前线程中
原理是这么个原理,看来可能是事务有嵌套问题
但是我没有开过Session啊,自己也没有开启过其它的事务.
只能猜测是Tomcat中哪里自动开启了吧.
对Hibernate理解的才是不够精.
问题解决了,但原因不太明,不知道高手们有没有其它的解释?