当前位置:编程学习 > JAVA >>

关于事务的一些问题,求帮忙,感谢~

Session session = getHibernateTemplate().getSessionFactory().openSession();	
Transaction tx = session.beginTransaction();
int count = 0;
try{
for(int i=0;i<data.size();i++){
try{
session.save((TbRawData)data.get(i));
count++;
}catch(HibernateException e){
e.printStackTrace();
}
System.out.println("id:"+count);
if(i%1000==0){
session.flush();
session.clear();
}
}
tx.commit();
}catch(HibernateException   e){
tx.rollback();
e.printStackTrace();
}finally{
session.close();
}
return count;

是这样的,由于效率问题,我想批量把数据插入数据库,但是这样的话如果一条数据有问题,那么全部都会rollback,现在是想让有错的数据不管,其他的照常插入,请问下session.save后抛出异常,怎么把这个搞掉,然后flush的时候不报错呢?? --------------------编程问答-------------------- 急啊~ --------------------编程问答-------------------- 把 try catch 的范围缩小 --------------------编程问答--------------------
引用 2 楼 defonds 的回复:
把 try catch 的范围缩小
??怎么缩小法? --------------------编程问答-------------------- 没人回答一下吗? --------------------编程问答-------------------- 继续顶~!!!! --------------------编程问答--------------------
引用 3 楼 HYbdbc 的回复:
Quote: 引用 2 楼 defonds 的回复:

把 try catch 的范围缩小
??怎么缩小法?
异常处理机制你不懂吗? --------------------编程问答--------------------
引用 6 楼 defonds 的回复:
Quote: 引用 3 楼 HYbdbc 的回复:

Quote: 引用 2 楼 defonds 的回复:

把 try catch 的范围缩小
??怎么缩小法?
异常处理机制你不懂吗?
你一个大 catch 把所有数据操作都放一块处理了,一旦有一个抛异常了,其他的就受干连;如果你分开处理,其他就不会受影响了 --------------------编程问答-------------------- 那就是没有事务啊 --------------------编程问答-------------------- session.save出错后 后面的session.flush都会有问题的。 --------------------编程问答-------------------- 现在是session.save由于有条数据有误会导致有一条插入数据会报异常,这个报异常后session.flush 就会有问题了,但是catch session.save这个异常后在catch里面用session.evict(obj) 本来打算是清除那条数据,但是这个又报错,报null id,但是session.save 没成功,这个对象就没有id值啊(id是递增的)。求解求救~ --------------------编程问答--------------------
引用 楼主 HYbdbc 的回复:
Session session = getHibernateTemplate().getSessionFactory().openSession();	
Transaction tx = session.beginTransaction();
int count = 0;
try{
for(int i=0;i<data.size();i++){
try{
session.save((TbRawData)data.get(i));
count++;
}catch(HibernateException e){
e.printStackTrace();
}
System.out.println("id:"+count);
if(i%1000==0){
session.flush();
session.clear();
}
}
tx.commit();
}catch(HibernateException   e){
tx.rollback();
e.printStackTrace();
}finally{
session.close();
}
return count;

是这样的,由于效率问题,我想批量把数据插入数据库,但是这样的话如果一条数据有问题,那么全部都会rollback,现在是想让有错的数据不管,其他的照常插入,请问下session.save后抛出异常,怎么把这个搞掉,然后flush的时候不报错呢??

先说你这个循环调用save方法,这不是批量操作。
去掉事务控制,让它自动提交,就可以了。 --------------------编程问答-------------------- 那你还事务个毛啊,事务就是想让一条数据出错其他操作就统一回滚,你不要这个功能还用毛事务啊?亲! --------------------编程问答-------------------- 楼主是这样的需求还用事务干嘛?不解,难道你插单条记录的时候会出现某某字段插入不成功的情况,无语
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,