环境: 数据库:SQL SERVER 2000 服务器:Tomcat 开发技术:Jsp,Hibernate 问题:在Session.beginTransaction()后出现transaction not successfully started 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(); } } 这个代码在以前类似的环境中使用过,没出现问题. 百度一下,有的说是可能存在事务的嵌套,有的说是其它的原因, current_session_context_class 配置为thread,异常依旧. 试试不开新Session吧.直接用HibernateSessionFactory.getSession();试试, HibernateSessionFactory.getSession();方法是从当前纯程中取Session,如果当前线程中没有Session,它会新建一个Session放到当前线程中 原理是这么个原理,看来可能是事务有嵌套问题 对Hibernate理解的才是不够精. 问题解决了,但原因不太明,不知道高手们有没有其它的解释? |
|
把异常贴上来……………….
|
|
30分 |
看了下你说了就是要了JSP和Hibernate这两种技术,如果你是要了Spring控制是事务,那么请将 session.beginTransaction();
Hibernate的事务注释掉,如果不是这个问题,可以试试SessionFactory.getCurrentSession() |
现在就是只有Jsp与Hibernate两种,没有Spring,
如果用HibernateSessionFactory.getSessionFactory().openSession(); 用HibernateSessionFactory.getSession();就正常了 HibernateSessionFactory是MyEclipse10自动生成的 现在能正常工作,就是想知道下原理,为什么新开Session就不行了? |