2015-09-06 79 views
0

我有一个查询休眠事务。休眠事务查询

在我的应用程序中,我列出了应该作为整体插入或不插入的数据。根据业务逻辑,我需要从该表中删除所有数据并添加插入完整列表。列表包含超过10万条记录。以下是我的交易代码。这是错误的,因为它在太长数据的一个查询异常的情况下不回滚。你能不能让我知道它的错误部分?

public boolean deleteAndSaveAll(ArrayList<MyData> listBean) throws Exception { 

    boolean transactionCompleted = false; 

    Session session = HibernateUtils.currentSession(); 

    Transaction tx = session.beginTransaction(); 

    try { 
     String stringQuery = "DELETE FROM MyData"; 
     Query query = session.createQuery(stringQuery); 
     query.executeUpdate(); 

     for (MyData MyData : listBean) { 
     session.save(MyData); 
     } 

     tx.commit(); 
     transactionCompleted = true; 
    } catch (Exception e) { 
     MyUtils.log("DAO: MyDataDAO error while deleteAndSaveAll : "+e.getMessage()); 
     e.printStackTrace(); 
     if(tx != null){ 
     tx.rollback(); 
     } 
     throw e; 
    }finally{ 
     HibernateUtils.closeSession(); 
    } 

    return transactionCompleted; 
} 
+0

你应该使检查点和回滚到最后保存检查点 –

+0

但几乎每个地方的例子,休眠给了这种例子。不知道为什么它不起作用。仍然感谢您的建议。我会搜索它相同的。 – Ketan

回答

0

我无法找到此问题的妥善解决。

所以我需要使用存储过程的工作。

存储过程中看到的逻辑如下所示。

  • 通完整的信息,我想插入到存储过程
  • 存储过程执行所有后端进程比如验证和整理的数据。
  • 将所有数据插入到表格架构与我们的表格相同的另一个临时表格中。
  • 截断现有表并将临时表中的所有数据复制到实际表中。

上面的程序比插入的仪式过程快得多。