在休眠中批量插入

我正在尝试在数据库表中上传 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 (在异常发生后不刷新会话) 异常。请帮忙批量上传。


qq_遁去的一_1
浏览 153回答 2
2回答

富国沪深

Hibernate 不允许在发生异常后刷新会话(您应该don't flush the Session after an exception occurs在堆栈跟踪中看到消息),因此继续的方法可以是:将您list分成 50 个元素的块,并尝试将每个块保存在单个事务中:如果一切顺利,只需提交并继续下一个块。如果发生错误,回滚事务并重新启动块,但将失败块的每个元素保存在专用事务中
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java