1 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
部分更新和Spring JPA的復(fù)雜性在于,您可能會(huì)發(fā)送填充的一半字段,甚至您需要從數(shù)據(jù)庫(kù)中提取整個(gè)實(shí)體,然后只需“合并”實(shí)體和pojo,因?yàn)榉駝t您將通過(guò)向數(shù)據(jù)庫(kù)發(fā)送空值來(lái)冒險(xiǎn)。
但是合并本身有點(diǎn)棘手,因?yàn)槟枰獙?duì)每個(gè)字段進(jìn)行操作,并決定是將新值發(fā)送到數(shù)據(jù)庫(kù)還是僅保留當(dāng)前值。添加字段時(shí),需要更新驗(yàn)證,并且測(cè)試變得更加復(fù)雜。在一句話中:它不會(huì)擴(kuò)展。這個(gè)想法是始終編寫(xiě)對(duì)擴(kuò)展開(kāi)放且對(duì)修改關(guān)閉的代碼。如果添加更多字段,則理想情況下不需要更改驗(yàn)證塊。
在 REST 模型中處理此問(wèn)題的方式是,每次需要時(shí)對(duì)整個(gè)實(shí)體進(jìn)行操作。假設(shè)你有用戶,然后你首先拉一個(gè)用戶:
GET /user/100
然后,您在網(wǎng)頁(yè)中擁有用戶ID = 100的整個(gè)字段。然后你改變它的姓氏。使用 PUT 謂詞調(diào)用相同的資源 URL 來(lái)傳播更改:
PUT /user/100
然后你發(fā)送所有的字段,或者更確切地說(shuō),“同一實(shí)體”用一個(gè)新的姓氏回來(lái)。你忘記了驗(yàn)證,驗(yàn)證將只作為一個(gè)黑匣子工作。如果添加更多字段,則會(huì)添加更多@NotNull或所需的任何驗(yàn)證。當(dāng)然,在某些情況下,您可能需要實(shí)際編寫(xiě)代碼塊以進(jìn)行驗(yàn)證。即使在這種情況下,驗(yàn)證也不會(huì)受到影響,因?yàn)槟鷮⒂幸粋€(gè)用于驗(yàn)證的主for循環(huán),并且每個(gè)字段都有自己的驗(yàn)證器。如果添加字段,則會(huì)添加驗(yàn)證程序,但主驗(yàn)證塊仍然不可觸及。
添加回答
舉報(bào)