org.hibernate.HibernateException: save在没有活动事务的情况下是无效的。

9 浏览
0 Comments

org.hibernate.HibernateException: save在没有活动事务的情况下是无效的。

我正在创建一个JSF应用程序,并在其中使用一些Hibernate的内容。我想要做的只是将实体保存到数据库中,但我一直在遇到这个异常:org.hibernate.HibernateException: save is not valid without active transaction。起初,我遇到了这个异常:org.hibernate.HibernateException: No CurrentSessionContext configured!。然后我发现我需要将这个添加到我的hibernate配置中:thread。这解决了上面的问题,但现在出现了上述的异常。我在将实体保存到数据库中时是这样做的:public void create(T entity) {getSessionFactory().getCurrentSession().save(entity);}。我的hibernate.cfg.xml文件如下:org.hibernate.dialect.MySQLDialectcom.mysql.jdbc.Driverjdbc:mysql://localhost:3306/online_tests_managementrootroottrueupdatethread。我使用的是:

  • Hibernate-4.1.4.Final
  • JDK 1.6
  • Tomcat 6
  • JSF 2.0
  • PrimeFaces 3.3.1
  • MySql

。有人知道问题可能在哪里吗?

0
0 Comments

org.hibernate.HibernateException: save is not valid without active transaction 这个问题的出现是因为在进行保存操作时没有开启事务,解决方法是在保存操作之前开启事务,并在保存操作完成后提交事务。

具体的解决方法如下所示:

public void create(T entity) {
   org.hibernate.Session ss = getSessionFactory().getCurrentSession();
   Transaction tx = ss.beginTransaction();
   ss.save(entity);
   tx.commit();    
}

需要注意的是,异常处理部分需要自行处理。

0
0 Comments

问题的出现原因是没有启用事务。解决方法是在保存实体之前启动事务,并在保存完成后结束事务。

public void create(T entity) {
    getSessionFactory().getCurrentSession().beginTransaction();
    getSessionFactory().getCurrentSession().save(entity);
    getSessionFactory().getCurrentSession().endTransaction();
}

这样修改后,问题应该得到解决。

0
0 Comments

在使用Spring的HibernateTransactionManager配置事务时,虽然日志中显示事务已经正确开始,但是保存操作仍然失败。原因是没有调用session.beginTransaction()方法。解决方法是在保存操作之前调用session.beginTransaction()方法。具体代码如下:

public void create(T entity) {
   Session session = getSessionFactory().getCurrentSession();
   Transaction trans = session.beginTransaction();
   session.save(entity);
   trans.commit();
}

这样就可以保证在保存操作之前开启事务,然后在保存完成后提交事务,避免出现"org.hibernate.HibernateException: save is not valid without active transaction"的异常。

0