我正在尝试在数据库表中上传 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 个元素的块,并尝试将每个块保存在单个事务中:
如果一切顺利,只需提交并继续下一个块。
如果发生错误,回滚事务并重新启动块,但将失败块的每个元素保存在专用事务中
添加回答
举报
0/150
提交
取消