我在使用Spring 3和Hibernate-core 3.5.1-Final的网站应用程序中遇到了一个非常奇怪的行为。
为了简化,我提供了我的代码:
if(ripid!=null){ //Parameter
Appuntamento apDaRip = appuntamentoService.findById(ripid);
if(apDaRip.getIdpadre()!=null){
apDaRip.setNota("RIPROGRAMMATO n."+ripid.toString()+"\n"+apDaRip.getNota());
apDaRip.setIdpadre(apDaRip.getIdpadre());
}else{
apDaRip.setNota("RIPROGRAMMATO n."+ripid.toString()+"\n"+apDaRip.getNota());
apDaRip.setIdpadre(ripid);
}
try{
apDaRip.setOrarioinizio(null);
apDaRip.setDurata(null);
//apDaRip.setIdappuntamento(null);
}catch(Exception e){e.printStackTrace();}
map.put("appuntamento", apDaRip);
}
di = datiintranetService.findById(DatiintranetService.PASS_X_INTERVENTI);
map.put("passinterventi", di.getBoolean());
这个想法是利用“Appuntamento”对象的一些数据来生成一个新的对象。所以我将更改一些值,在将对象发送到我的视图(jsp)之前,通过调用findbyid获取其他数据。这会导致对“Appuntamento”对象进行更新... 当然我不希望出现这种情况。有人能解释一下吗?
编辑-1
这是Dao的代码:
@Transactional
public class DatiintranetService {
private DatiintranetDAO datiintranetDAO;
public void setDatiintranetDAO(DatiintranetDAO datiintranetDAO) {
this.datiintranetDAO = datiintranetDAO;
}
public DatiintranetDAO getDatiintranetDAO() {
return datiintranetDAO;
}
public Datiintranet findById(Integer id) {
return datiintranetDAO.findById(id);
}
}
对于 Appuntamento 类,我向您提供一个快照
@Entity
@Table(name = "appuntamento", schema = "public")
public class Appuntamento implements java.io.Serializable {
@Id
@SequenceGenerator(name="appuntamentoID", sequenceName="appuntamento_idappuntamento_seq",allocationSize =1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="appuntamentoID")
@Column(name = "idappuntamento", unique = true, nullable = false)
public Integer getIdappuntamento() {
return this.idappuntamento;
}
}
编辑-2 如果我将这两行移动到if语句的上方,就不会进行更新。
di = datiintranetService.findById(DatiintranetService.PASS_X_INTERVENTI);
map.put("passinterventi", di.getBoolean());