gpt4 book ai didi

java - hibernate findbyid 导致更新?

转载 作者:行者123 更新时间:2023-11-30 11:12:32 32 4
gpt4 key购买 nike

我在使用 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”的一些数据来生成一个新对象。所以我要更改一些值,在将对象发送到我的 View (jsp) 之前,我通过调用 findbyid 获取其他数据。这会导致对 Appuntamento 对象的更新...当然我不希望这种行为。有人可以解释一下吗?

编辑-1

这是道

@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如果我将 thoese 移动到 if 语句上方的两行,则不会发生更新。

di = datiintranetService.findById(DatiintranetService.PASS_X_INTERVENTI);
map.put("passinterventi", di.getBoolean());

最佳答案

如果您查询一个实体并更改该实体,默认行为是通过更新数据库来保留这些更改。这通常是您希望发生的情况,但显然并非在所有情况下都如此。

如果您想避免更新,您需要通过调用 session.evict(apDaRip) 来分离实体,其中 session 是对 hibernate session 的引用(请参阅Session.evict())。您可能希望在获得实体后立即逐出(在调用 findById 之后)。

关于java - hibernate findbyid 导致更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26848496/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com