【问题标题】:Some clarification on the Hibernate save() method. Why correctly update an existing record?关于 Hibernate save() 方法的一些说明。为什么要正确更新现有记录?
【发布时间】:2016-01-09 20:27:10
【问题描述】:

我是 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() 休眠方法。

它可以正常工作并且记录已正确更新,但这似乎很奇怪,因为据我了解 save() 方法必须创建一个新记录,而 update() 方法必须更新现有记录。

那么为什么它会起作用?为什么它会正确更新现有记录?

Tnx

【问题讨论】:

    标签: java hibernate orm spring-data


    【解决方案1】:

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

    持久化给定的瞬态实例,首先分配一个生成的标识符。 (如果使用分配的生成器,则使用标识符属性的当前值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 2021-09-28
      • 2019-05-14
      • 1970-01-01
      相关资源
      最近更新 更多