ssh 框架下批量增加问题

看我页面和相应代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



专家发送消息




消息发送





cellpadding="2">












<!--/s:hidden-->
/s:hidden
/s:hidden
/s:hidden




收件人:/s:label

listValue="bjiRealName" value="ids" theme="simple" >

/s:if/s:checkboxlist


主  题:/s:label

/s:textfield

内  容:/s:label



/s:submit

/s:form


保存方法代码
public String expSaveMessage()throws Exception{
String[] bjilist = getBjilist();
Message m = new Message();
lastreadTime = m.getLastreadTime();
if(lastreadTime==null){
lastreadTime = "未读";
}
sendTime = new Date();
for (int i = 0; i < bjilist.length; i++) {
receiveName = bjilist[i];
// System.out.println("*&*&*&&+========"+receiveName);
// BjilistByReveiveid = ids[i];
m.setReceiveName(receiveName);
m.setExpertlistBySendid(ExpertlistBySendid);
m.setSendflag(sendflag);
m.setReceiveflag(receiveflag);
m.setReceiveName(receiveName);
m.setSendName(sendName);
m.setMessage(message);
m.setSendTime(sendTime);
m.setLastreadTime(lastreadTime);
m.setSubjectTitle(subjectTitle);
messageService.save(m);
}

    return SUCCESS;
}

没有错误错误但是执行完以后
有两个接受人的话,
只增加一次 insert
第二次是就是 update 修改哪一行数据:这是怎么回事呀

改成如下形式,因为你每回都是在一个对象上进行的修改,造成第一次insert,后面的都是update。所以你需要在for循环中新建Message对象。
[code="java"]
public String expSaveMessage()throws Exception{
String[] bjilist = getBjilist();

lastreadTime = m.getLastreadTime(); 
if(lastreadTime==null){ 

    lastreadTime = "未读"; 
} 

Message m = null;
sendTime = new Date(); 
for (int i = 0; i < bjilist.length; i++) { 
    m = new Message();
    receiveName = bjilist[i]; 
    m.setReceiveName(receiveName); 
    m.setExpertlistBySendid(ExpertlistBySendid); 
    m.setSendflag(sendflag); 
    m.setReceiveflag(receiveflag); 
    m.setReceiveName(receiveName); 
    m.setSendName(sendName); 
    m.setMessage(message); 
    m.setSendTime(sendTime); 
    m.setLastreadTime(lastreadTime); 
    m.setSubjectTitle(subjectTitle); 
    messageService.save(m); 
} 

return SUCCESS; 

}
[/code]

事务的问题吧.我也正为这个烦着呢.

保存时你只new了一个Message对象,第一次save后m就存在于hibernate的缓存中做为持久化对象,第二次循环时hibernate会认为是对m的修改,你可以把new放for循环里面,应该就没有问题了。