我正在尝试在数据库表中上传Excel工作表。我将excel行转换为休眠实体,并尝试将其保存在数据库中。为了实现这一点,我面临着问题。数据库约束很少,例如唯一键或组合键等。但是用户可以上传任何工作表。因此,如果无法插入某行,那么我的要求是其他行应继续。和交易应保存。
--as-parquetfile
` 如果单行失败,则所有行都将失败。我正进入(状态 org.hibernate.AssertionFailure:空ID(发生异常后不刷新Session)。请帮助批量上传。
答案 0 :(得分:0)
为此,即使某些记录失败,也应使用try-catch
构造继续插入记录:
Session session=localSessionFactoryBean.getObject().openSession();
Transaction tx = session.beginTransaction();
for(i=0;i<list.size();i++){
try{
Long Id = (Long) session.save(list.get(i));
} catch(Exception e){
//nop
}
if (i % 50 == 0) {
session.flush();
session.clear();
tx.commit();
}
}
tx.commit();
session.close();
答案 1 :(得分:0)
休眠发生后,Hibernate不允许刷新会话(您应该在堆栈跟踪中看到消息don't flush the Session after an exception occurs
),所以一种继续进行的方式可能是:
将您的list
分成50个元素,并尝试在单个事务中保存每个块: