/**
* 深度复制,复制的整个对象图
*/
public static Serializable deeplyCopy(Serializable src){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(src);
oos.close();
baos.close();
byte[] bytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
Serializable copy = (Serializable) ois.readObject();
ois.close();
bais.close();
return copy ;
} catch (Exception e) {
e.printStackTrace();
}
return null ;
}
class SurveyServiceImpl ...{
...
public void moveOrCopyPage(Integer srcPid, Integer targPid, int pos){
Page srcPage = this.getPage(srcPid);
Survey srcSurvey = srcPage.getSurvey();
Page targPage = this.getPage(targPid);
Survey targSurvey = targPage.getSurvey();
//判断移动/赋值
if(srcSurvey.getId().equals(targSurvey.getId())){
setOrderno(srcPage,targPage,pos);
}
//复制
else{
//******强行初始化问题集合,否则深度复制的页面对象没有问题集合****
srcPage.getQuestions().size();
//深度复制
Page copyPage = (Page) DataUtil.deeplyCopy(srcPage);
//设置页面和目标调查关联
copyPage.setSurvey(targSurvey);
//保存页面
pageDao.saveEntity(copyPage);
for(Question q : copyPage.getQuestions()){
questionDao.saveEntity(q);
}
setOrderno(copyPage,targPage,pos);
}
}
}
* 深度复制,复制的整个对象图
*/
public static Serializable deeplyCopy(Serializable src){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(src);
oos.close();
baos.close();
byte[] bytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
Serializable copy = (Serializable) ois.readObject();
ois.close();
bais.close();
return copy ;
} catch (Exception e) {
e.printStackTrace();
}
return null ;
}
移动复制页面,所有复制的关联的对象都必须实现序列化接口
注意:如果不需要复制某个关联对象,只需加个关键字 transient,表示临时的,例如,不需要复制调查页面时 survey:
private transient Survey survey; 这样java虚拟机在做深度复制时,就会断开Survey,以及后面所有与Survey对象相关联的对象
class SurveyServiceImpl ...{
...
public void moveOrCopyPage(Integer srcPid, Integer targPid, int pos){
Page srcPage = this.getPage(srcPid);
Survey srcSurvey = srcPage.getSurvey();
Page targPage = this.getPage(targPid);
Survey targSurvey = targPage.getSurvey();
//判断移动/赋值
if(srcSurvey.getId().equals(targSurvey.getId())){
setOrderno(srcPage,targPage,pos);
}
//复制
else{
//******强行初始化问题集合,否则深度复制的页面对象没有问题集合****
srcPage.getQuestions().size();
//深度复制
Page copyPage = (Page) DataUtil.deeplyCopy(srcPage);
//设置页面和目标调查关联
copyPage.setSurvey(targSurvey);
//保存页面
pageDao.saveEntity(copyPage);
for(Question q : copyPage.getQuestions()){
questionDao.saveEntity(q);
}
setOrderno(copyPage,targPage,pos);
}
}
}