java - 关于 Hibernate save() 方法的一些说明。为什么要正确更新现有记录?

标签 java hibernate orm spring-data

我对 Hibernate 还很陌生,我有以下疑问。

进入名为TWP1007_PROGETTO的数据库表,我有这一行(但此时内容并不重要):

PRG_PRO COD_MEC_ATT DAT_ANN_SCO_ATT COD_MEC_INI_PRO COD_PRO IMP_FIN COD_TIP_STA FLG_TIP_PRG PRG_GRA_WIF PRG_GRA_PNS FLG_PRE_FIR_DIR FLG_PRE_FIR_REV DAT_INS_REN DESC_NOM_FIL_REN    OGG_FIL_REN DAT_VAL DES_NOT_VAL DAT_TRA_UFF_LIQ IMP_TOT_SPE IMP_SAL DES_NOM_UTE_VAL DES_NOM_DIR_REN DAT_ORA_ULT_MOV COD_PGM_ULT_MOV COD_UTE_ULT_MOV
2   AGIS018009  201516  AGIS018009  Progetto Wifi   7980,00 4   W   2                               null                    12/10/2015 00:00:00 Rimesso in lavorazione  user.name

然后,在 Spring MVC service 类中,我创建了此方法来更新此表的记录:

public void rimettiInLavorazioneProgetto(Twp1007Progetto progetto) {
    progettoRepo.save(progetto);
}

其中(Twp1007Progetto progetto 是映射 TWP1007_PROGETTO 表的对象)。

正如您在前面的方法中看到的,我使用 save() hibernate 方法。

它有效并且记录已正确更新,但这似乎很奇怪,因为根据我的理解,save()方法必须创建一个新记录,而update() 方法必须更新现有记录。

那么为什么它有效呢?为什么它会正确更新现有记录?

最佳答案

是的。 Save()当且仅当您的对象没有生成的标识符时,方法才会创建新记录

Persist the given transient instance, first assigning a generated identifier. (Or using the current value of the identifier property if the assigned generator is used.)

如果您已经生成了与您的对象关联的标识符,它只会保存到该行。

关于java - 关于 Hibernate save() 方法的一些说明。为什么要正确更新现有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33079769/

相关文章:

java - 使用 Hibernate 困惑进行搜索

java - Spring beans内的事务

java - 如何在Java中解析这个 "31/10/13"到Oracle日期

symfony - 使用 Doctrine 的 PreUpdate 生命周期事件保留对文档所做的更改

java - GWT:使用 JSON 服务

java - 如何将自定义处理器添加到StreamSet

java - 在 java 中绘制圆的切片?

java - 对象在方法中为 null,但在类中不为 null

python - 具有具体继承的 SQLAlchemy 多态关系

java - 在 java 中出现异常后继续的更好方法