【发布时间】:2015-09-06 20:03:53
【问题描述】:
我有一个 Hibernate Transaction 的查询。
在我的应用程序中,我有应该作为一个整体插入或不插入的数据列表。根据业务逻辑,我需要从该表中删除所有数据并添加插入完整列表。列表包含超过 100k 条记录。以下是我的交易代码。这是错误的,因为它没有回滚,因为对于太长的数据有一个查询异常。你能告诉我其中有什么问题吗?
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;
}
【问题讨论】:
-
你应该做检查点并回滚到上次保存检查点
-
但是几乎每个地方的hibernate例子都给出了这样的例子。不知道为什么它不起作用。还是谢谢你的建议。我会搜索相同的。