开发者社区> 问答> 正文

通过hibernate 获取jdbc连接。执行批处理..数据更新不进去?报错

测试直接用jdbc批处理没问题的,

通过hibernate 获取的jdbc连接和 直接classforname  的连接有区别吗?

下面是我的代码。

sql 是这样的

String sqlbc = "update grow_achievement_mes gam set gam.classranking =? where gam.id=? ";

下面是执行的方法。

public void batchBcNc(String sql, List<BcNcVO>list) {
Session session = getHibernateTemplate().getSessionFactory().openSession();
Connection con= session.connection();
PreparedStatement stmt = null;
int count=0;
try {
con.setAutoCommit(false);
stmt = con.prepareStatement(sql);
for(int i=0;i<list.size();i++){
count++;
if(i>0){
if(list.get(i).getExamination()==list.get(i-1).getExamination()){
stmt.setLong(1,list.get(i-1).getSequen());
stmt.setString(2,list.get(i).getId());
}
}else{
stmt.setLong(1,list.get(i).getSequen());
stmt.setString(2,list.get(i).getId());
}
stmt.addBatch();
if(count%500==0){
stmt.executeBatch();
con.commit();
stmt.clearBatch();
}
}
if(count%500!=0){
stmt.executeBatch();
con.commit();
stmt.clearBatch();
}
} catch (SQLException e) {
e.printStackTrace();
try {
con.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
try {
if(stmt!=null){
stmt.close();
}
if(session!=null){
session.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

现在就是这样执行之后不报错,但是数据库里没数据。

数据更新不了。

展开
收起
爱吃鱼的程序员 2020-06-22 19:26:23 532 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    以前没有用hibernate获取连接批处理过。。这是第一次碰上这问题。求大婶帮忙看看你看下是不是hibernate集成了Spring  事务交给Sping控制了

    2020-06-22 19:26:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Blink SQL关键技术及实现原理 立即下载
Apache Flink 流式应用中状态的数据结构定义升级 立即下载
低代码开发师(初级)实战教程 立即下载