第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring Data CrudRepository 僅在調(diào)用 save() 時返回更改的字段

Spring Data CrudRepository 僅在調(diào)用 save() 時返回更改的字段

翻翻過去那場雪 2021-11-24 15:05:36
我正在使用 Spring Data(版本 1.13.9.RELEASE)并且有一個CrudRepository叫做myRepository. 我正在調(diào)用myRepository.save(myObject), 以覆蓋myObject數(shù)據(jù)庫中的現(xiàn)有實例,并且我指定了myObjectas 的一些字段null。例如:{    "prop1": "val1",    "prop2": null,    "prop3": "val3"}當(dāng)我調(diào)用myRepository.save(myObject)并讀取返回值時,myObject我設(shè)置的所有字段null都返回為null(prop2在本例中如此)。但是,prop2數(shù)據(jù)庫中的值不是null在調(diào)用之后save()- 在我調(diào)用之前它仍然具有先前的值save()。這實際上是我在這種特定情況下想要的行為(null調(diào)用時忽略值myRepository.save()),但我希望 的返回值save()反映操作后數(shù)據(jù)庫中的實際內(nèi)容,而不是僅返回更新的字段和設(shè)置指定為nulltonull或其默認(rèn)值的字段(例如false在布爾值的情況下。這是CrudRepository'ssave()行為的預(yù)期行為嗎?
查看完整描述

2 回答

?
慕桂英4014372

TA貢獻1871條經(jīng)驗 獲得超13個贊

要理解這個問題,您需要對 Hibernate Object Lifecycle 有所了解。

Hibernate 對象生命周期由以下狀態(tài)組成:1. 瞬態(tài)狀態(tài) 2. 持久狀態(tài) 3. 分離狀態(tài)等

當(dāng)您創(chuàng)建一個新對象時,它處于瞬態(tài),Hibernate 無法檢測在瞬態(tài)中存在/創(chuàng)建的對象。

當(dāng)您調(diào)用時save() saveOrUpdate(),對象從瞬態(tài)狀態(tài)移動到持久狀態(tài),現(xiàn)在 Hibernate 將開始跟蹤對對象所做的所有更改(但對象尚未寫入數(shù)據(jù)庫)。

因此,在您的情況下,由于對象未處于持久狀態(tài),因此 hibernate 無法識別它并將觸發(fā)(最有可能)insert查詢。但是,如果對象已經(jīng)處于持久狀態(tài),hibernate 會知道某些字段已修改,因此將觸發(fā)update查詢。

這就是為什么如果您希望休眠來觸發(fā)update查詢,您需要確保對象處于持久狀態(tài)。


查看完整回答
反對 回復(fù) 2021-11-24
?
烙印99

TA貢獻1829條經(jīng)驗 獲得超13個贊

這意味著事務(wù)尚未完成,所有更改僅在緩存中。要強制更新,您可以調(diào)用entityManager.flush()或移動您需要的所有邏輯到另一個服務(wù)或管理器的單獨公共方法中,并將其注釋為@Transactional


查看完整回答
反對 回復(fù) 2021-11-24
  • 2 回答
  • 0 關(guān)注
  • 425 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號