希望每次调用保存以提交

时间:2010-01-06 03:06:47

标签: java hibernate

如何将每次调用保存到数据库?

我不希望在每次循环中调用commit然后重启事务。

对于我的应用程序,只需在每个session.save进行提交即可。

2 个答案:

答案 0 :(得分:2)

所以这样编码:

// connection is passed into the method.
try
{
    connection.setAutoCommit(false);
    PreparedStatement ps = connection.prepareStatement(...);
    // bind variables
    for (Collection stuff : stuffList)
    {  
        // save repeatedly 
    }
    connection.commit();
}
catch (SQLException e)
{
   DatabaseUtils.rollback(connection);
}
finally
{
    DatbaseUtils.close(statement);
    DatabaseUtils.close(connection);
}

交易是一个贯穿各领域的问题。最好不要在持久层内部使用这样的事务逻辑,特别是如果多个数据访问对象必须参与单个工作单元。

答案 1 :(得分:1)

编辑:使用hibernate事务:

Session s = factory.getCurrentSession();
try {
  s.beginTransaction();
  Thing thing = new Thing();
  s.save(thing);
  s.getTransaction().commit();
} catch (RuntimeException e) {
  s.getTransaction().rollback();
  throw e;
}

这里详细介绍了使用hibernate进行事务处理:

在servlet环境中,hibernate建议实现一个过滤器,在请求开始时启动事务,并在请求完成时结束事务。示例代码:

如果使用JTA或EJB,则有方法可以使用指南中描述的现有事务上下文。

您也可以打开autoCommit模式(默认情况下禁用)。每个陈述都将在一个单独的交易中有效执行。这由“hibernate.connection.autocommit”选项控制。更多细节在这里: