是否可以在保存期间停止Hibernate?

时间:2012-09-12 15:34:05

标签: java hibernate persistence

我有一个应用程序,它将结构化格式的大文件上传到数据库中。结构是这样的,即保存Data对象集合的Data对象。

有时这些文件可以保存相当长的时间,在此保存期间,用户可能决定取消操作。

我的问题是,如果没有杀死JVM,是否有办法停止持久化Data对象的过程?任何想法,包括改变持久性技术都是值得欢迎的。

这是来自我的DAO的方法,它被称为持久化Data对象。

@Override
public Data saveData(Data data) {

    Transaction transaction = null;

    Session session = HibernateUtil.getSessionFactory().openSession();
    Data merged = null;
    try{
        transaction = session.beginTransaction();
        merged = (Data) session.merge(data);
        transaction.commit();
    } catch (HibernateException e) {
        transaction.rollback();         
        throw e;
    } finally {
        session.close();
    }
    return merged;
}

2 个答案:

答案 0 :(得分:0)

如果可能的话,实现将大量数据保存在块中的最佳方法。持久性 - 服务应被视为异步过程,以便客户可以同时使用它,同时数据被持久化。您可以使用类似“isCanceled”的线程局部变量,初始值为“false”。在每次迭代中,您都可以检查变量是否设置为“true”并取消持久操作。但是,如果需要回滚逻辑,则必须考虑逻辑,从数据库中删除持久化的条目。

答案 1 :(得分:-1)

将会话设置为参数,以便您可以终止会话并进行回滚。