今天下午在struts中写了个action,用来读取表单中一个二维表中的数据并通过Hibernate写到数据库中去。一运行发现只把表的最后一列存进去了。web页面我也改了、hibernate我也检查了,action我也仔细看了一遍,就是没有发现是什么问题。
问题代码如下:
- //Saving participations for property[i]
- comparisonParticipation = new ComparisonParticipation();
- int len = itemList.size();
- p = "p"+i;
- for(int j = 1; j < len+1; j++){
- comparisonItem = (ComparisonItem)itemList.get(j-1);
- Long itemId = comparisonItem.getId();
- String q = "i"+j+p;
- String content = request.getParameter(q);
- comparisonParticipation.setPropertyId(propertyId);
- comparisonParticipation.setItemId(itemId);
- comparisonParticipation.setContent(content);
- cnService.persist(comparisonParticipation);
- }
最终熬不住了出去走了一圈,回来才恍然大悟第五行开始的循环中用到的始终都是第二行创建的comparisonParticipation 对象,再循环中不管附几遍值,在数据库中存储的只是这一个对象,前边写的都被后边的覆盖了,所以才出现只保存了一行的问题。
把comparisonParticipation 对象初始为null,再循环中用到的时候再new一下就是一个新的对象(见第10行),不会再存在后面的值覆盖前面值的问题,改正后的代码如下:
- //Saving participations for property[i]
- comparisonParticipation = null;
- int len = itemList.size();
- p = "p"+i;
- for(int j = 1; j < len+1; j++){
- comparisonItem = (ComparisonItem)itemList.get(j-1);
- Long itemId = comparisonItem.getId();
- String q = "i"+j+p;
- String content = request.getParameter(q);
- comparisonParticipation = new ComparisonParticipation();
- comparisonParticipation.setPropertyId(propertyId);
- comparisonParticipation.setItemId(itemId);
- comparisonParticipation.setContent(content);
- cnService.persist(comparisonParticipation);
- }
本人新手,高手勿笑,如果还有错误请指正,新手引以为戒……
转载于:https://blog.51cto.com/albany/641687