如何将每次调用保存到数据库?
我不希望在每次循环中调用commit然后重启事务。
对于我的应用程序,只需在每个session.save进行提交即可。
答案 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”选项控制。更多细节在这里: