为了账号安全,请及时绑定邮箱和手机立即绑定

在休眠中批量插入

在休眠中批量插入

qq_遁去的一_1 2021-08-19 16:04:09
我正在尝试在数据库表中上传 Excel 工作表。我正在将 excel 行转换为休眠实体并尝试将其保存在数据库中。为了实现这一点,我面临着问题。很少有数据库约束,如唯一键或复合键等,但用户可以上传任何工作表。因此,如果特定行未能插入,那么我的要求是应继续其他行。并且交易应该被保存。`Session session=localSessionFactoryBean.getObject().openSession();        Transaction tx = session.beginTransaction();fot(i=0;i<list.size();i++){Long Id = (Long) session.save(list.get(i));if (i % 50 == 0) {                    session.flush();                    session.clear();                }}tx.commit();session.close();` 此处如果单行失败,则所有行都失败。我收到 org.hibernate.AssertionFailure: null id (在异常发生后不刷新会话) 异常。请帮忙批量上传。
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

Hibernate 不允许在发生异常后刷新会话(您应该don't flush the Session after an exception occurs在堆栈跟踪中看到消息),因此继续的方法可以是:

将您list分成 50 个元素的块,并尝试将每个块保存在单个事务中:

  • 如果一切顺利,只需提交并继续下一个块。

  • 如果发生错误,回滚事务并重新启动块,但将失败块的每个元素保存在专用事务中


查看完整回答
反对 回复 2021-08-19
  • 2 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信