求大神指教!!!为什么用for循环往数据库插数据只能插入第一条?

weixin_42123467 2018-06-28 05:45:26
public void saveLook(Promote promote){
int a = 0;
User user = UserUtils.getUser();
if (StringUtils.isNotBlank(user.getId())){
promote.setCreateBy(user);;
}
List<User> userList=new ArrayList<User>();
String[] department=promote.getSuitDepartment().split(",");
for(int i=0;i<department.length;i++){
List<User> list=systemService.findUserByOfficeId(department[i]);
userList.addAll(list);
}
for(int i=0;i<userList.size();i++){
Promote promote1=new Promote();
promote1.preInsert();
promote1.setTheme(promote.getTheme());
promote1.setContent(promote.getContent());
promote1.setEffectTime(promote.getEffectTime());
promote1.setSuitDepartment(promote.getSuitDepartment());
promote1.setSeePeople(userList.get(i).getLoginName());
promote1.setTendingId(promote.getTendingId());
this.promoteDao.savePromoteLook(promote1);
}
}
...全文
1106 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
木子0204 2018-09-18
  • 打赏
  • 举报
回复
for(int i=0;i<userList.size();i++){
Promote promote1=(Promote )userList.get(i);
promote1.preInsert();
promote1.setTheme(promote.getTheme());
promote1.setContent(promote.getContent());
promote1.setEffectTime(promote.getEffectTime());
promote1.setSuitDepartment(promote.getSuitDepartment());
promote1.setSeePeople(userList.get(i).getLoginName());
promote1.setTendingId(promote.getTendingId());
this.promoteDao.savePromoteLook(promote1);
}

或者你直接定义一个集合
List<Promote > pList = new ArrayList<Promote >
把你的
Promote promote1=(Promote )userList.get(i); 结果放进去,
写个批量处理的方法去插入,那样效果会更快的
hubuwx 2018-09-15
  • 打赏
  • 举报
回复
声明并实例化对象放在循环体里面就好了
潘少丶 2018-07-10
  • 打赏
  • 举报
回复
数据库调皮引起的、目测是
weixin_42123467 2018-06-29
  • 打赏
  • 举报
回复
update是1的话就是成功的,0是未成功的
weixin_42123467 2018-06-29
  • 打赏
  • 举报
回复


stacksoverflow 2018-06-29
  • 打赏
  • 举报
回复 1
自动生成id的方法生成的ID是否重复,检查一下。
stacksoverflow 2018-06-29
  • 打赏
  • 举报
回复
如果for循环只能插入第一条的话,一般是数据约束违反问题,比如主键等唯一列。或者触发了触发器规则。但你没报异常。。。
如果有sql,但数据库没插进去,一般是事物没有提交,但你第一条已经插入了。。。

看看你看得数据库表和程序连的表是不是一个。

正常的话SQL发过去并且不报错,数据库是能插入的。
因为不管是什么框架,SQL已经发过去了,数据库就要执行,就算是回滚也是回滚所有记录。

再检查一下代码和数据库连接。
weixin_42123467 2018-06-29
  • 打赏
  • 举报
回复
1.userList.size()是5
2.试过了,没有异常
3.是一个自动生成id的方法
4.每执行一次 this.promoteDao.savePromoteLook(promote1);已经生成了sql语句,但是不往数据库插
weixin_42123467 2018-06-29
  • 打赏
  • 举报
回复
多谢,现在已经能存进去了,而我什么都没改。。。
stacksoverflow 2018-06-29
  • 打赏
  • 举报
回复
你不会是把insert语句给缓存了吧?
stacksoverflow 2018-06-29
  • 打赏
  • 举报
回复
第一条返回1,成功插入
后面的都是返回0,表示数据没更新。
中间的using existing EHcache 有点可疑。
看看EHcache 配置有没有问题。
再见爱情 2018-06-29
  • 打赏
  • 举报
回复
截图也不截全一点
你看看是不是using existing EHcache named这个是报异常
导致的事物回滚
stacksoverflow 2018-06-28
  • 打赏
  • 举报
回复
1.把userList.size()打印出来看看
2.try catch 一下 this.promoteDao.savePromoteLook(promote1); 看看有没有异常
3.promote1.preInsert()是干吗的?

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧