Java 是否可以在保存过程中停止休眠?

Java 是否可以在保存过程中停止休眠?,java,hibernate,persistence,Java,Hibernate,Persistence,我有一个应用程序,可以将结构化格式的大文件上传到数据库中。该结构是这样的,即保存一个数据对象并保存一组DataRow对象 有时,这些文件可能会保存相当长的时间,在保存期间,用户可能会决定取消该操作 我的问题是,除了杀死JVM,还有什么方法可以停止持久化数据对象的过程吗?欢迎任何想法,包括对持久性技术的更改 下面是我的DAO中用来持久化数据对象的方法 @Override public Data saveData(Data data) { Transaction transaction =

我有一个应用程序,可以将结构化格式的大文件上传到数据库中。该结构是这样的,即保存一个数据对象并保存一组DataRow对象

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

我的问题是,除了杀死JVM,还有什么方法可以停止持久化数据对象的过程吗?欢迎任何想法,包括对持久性技术的更改

下面是我的DAO中用来持久化数据对象的方法

@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;
}

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

如果可能的话,实现将海量数据分块持久化的最佳方法。持久化-服务应被视为异步进程,以便在持久化数据的同时,客户端可以同时处理您的it。可以使用初始值为“false”的线程局部变量,如“isCanceled”。在每次迭代中,您可以检查变量是否设置为“true”,并取消持久化操作。但是,如果需要回滚逻辑,就必须考虑从数据库中删除持久化条目的逻辑。 调用session.close()?这会导致异常并允许事务回滚吗?它被否决了,因为这不是一个好方法。。abvoe是一种更好的方式,它可以单独提交每一位,而不是管理事务中的每一件事。我不希望单独的行进入我的数据库,我希望要么全部,要么什么都不,这是处理事务的正确方法。这样做有没有什么特别糟糕的影响,你能想到的。它不能回答实际问题,但你可以异步保存。然后用户不需要知道保存需要多长时间。我不希望在整个结构准备就绪之前提交数据,Hibernate会为我处理批处理,其他应用程序也会查看数据,因此这不是一个选项,我需要停止Hibernate持久化,让它自己回滚。