我有一个应用程序,它将结构化格式的大文件上传到数据库中。结构是这样的,即保存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;
}
答案 0 :(得分:0)
如果可能的话,实现将大量数据保存在块中的最佳方法。持久性 - 服务应被视为异步过程,以便客户可以同时使用它,同时数据被持久化。您可以使用类似“isCanceled”的线程局部变量,初始值为“false”。在每次迭代中,您都可以检查变量是否设置为“true”并取消持久操作。但是,如果需要回滚逻辑,则必须考虑逻辑,从数据库中删除持久化的条目。
答案 1 :(得分:-1)
将会话设置为参数,以便您可以终止会话并进行回滚。