java - 在休眠中批量插入
问题描述
我正在尝试在数据库表中上传一个 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(发生异常后不刷新会话)异常。请帮助批量上传。
解决方案
为此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();
推荐阅读
- javascript - 如何有条件地在 javascript 对象 reduce 中添加道具?
- django - 将文本模型中的作者姓名渲染为 django 中的外键
- android - 如何使用 Android 导航组件和深度链接打开活动和特定目的地
- c# - 如何在 sortedList 中获取特定值的范围键
- java - 无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]?
- codenameone - 代号一中的连字符?
- c++ - 仅使用 iostream 和 iomanip 库时在 c++ 中引用 ios 库
- forms - PowerShell 表单未返回预期输出
- python - 等待第 N 个元素的可见性
- css - 根据宽度百分比裁剪 CSS 线性渐变