- 循环插入一批文件信息到MySql数据库,用getHibernateTemplate().saveOrUpdateAll(list)只保存了最后一条。
- Debug逐步分析,发现list确实是那N条数据。在这里没有仔细看,只大概的看了是不是那几条数据。
- 最后发现把实体add给list的时候,实体在for循环外面。我们知道java每new一次才算分配一个地址给这个类,所以虽然在for里面多次给实体set,但是每次都把上次的数据给覆盖掉了。
- 写了个小例子:
打印的结果是:public static void main(String[] args) { User user = new User(); List<User> list = new ArrayList<User>(); for(int i=0;i<5;i++){ user.setName("i"+i); list.add(user); } System.out.println("size=="+list.size()); for(int i=0;i<list.size();i++){ System.out.println("entity:"+list.get(i)); System.out.println("name:"+list.get(i).getName()); } }
size==5 entity:com.thread.User@c17164 name:i4 entity:com.thread.User@c17164 name:i4 entity:com.thread.User@c17164 name:i4 entity:com.thread.User@c17164 name:i4 entity:com.thread.User@c17164 name:i4
- 从上面可以看出来,虽然数据是5条,却都是最后加入的实体。虽然简单,却还是出错,实在不应该,记下来,提醒自己。
getHibernateTemplate().saveOrUpdateAll(list)只保存了最后一条
最新推荐文章于 2024-09-04 15:31:39 发布