gpt4 book ai didi

java - Hibernate事务查询

转载 作者:行者123 更新时间:2023-11-29 22:03:02 25 4
gpt4 key购买 nike

我有一个关于 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;
}

最佳答案

我找不到此问题的正确解决方案。

所以我需要使用存储过程来解决问题。

存储过程背后的逻辑如下所示。

  • 传递我想要插入存储过程的完整信息
  • 存储过程执行所有后端过程,例如验证和排列数据。
  • 将所有数据插入到另一个临时表中,其中表架构与我们的表相同。
  • 截断现有表并将所有数据从临时表复制到实际表。

上述过程比插入的仪式过程要快得多。

关于java - Hibernate事务查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32427755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com