Code Bye

Hibernate无法开启事务的问题 .

环境:

数据库: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理解的才是不够精.

问题解决了,但原因不太明,不知道高手们有没有其它的解释?

把异常贴上来……………….

30分
看了下你说了就是要了JSP和Hibernate这两种技术,如果你是要了Spring控制是事务,那么请将 session.beginTransaction();
Hibernate的事务注释掉,如果不是这个问题,可以试试SessionFactory.getCurrentSession()
现在就是只有Jsp与Hibernate两种,没有Spring,

如果用HibernateSessionFactory.getSessionFactory().openSession();  
就出现 异常 :transaction not successfully started

用HibernateSessionFactory.getSession();就正常了

HibernateSessionFactory是MyEclipse10自动生成的

现在能正常工作,就是想知道下原理,为什么新开Session就不行了?
网上查了下基本都是Spring的,但我的没有Spring,不知道产生这种现象的原因


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Hibernate无法开启事务的问题 .