0

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

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

我的问题是,除了杀死 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;
}
4

2 回答 2

0

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

于 2012-09-12T17:25:58.917 回答
-1

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

于 2012-09-12T15:38:09.460 回答