我試圖想出了與Spring MVC的結合使用Spring數據更新時,MongoDB的文檔可重複使用的模式的對象/文件。模式的更新與彈簧數據的MongoDB和Spring MVC
用例一般可以通過概括:
- 文檔在使用蒙戈創建repository.save()該文件的
- 零件隨後在一個Spring MVC可編輯的形式呈現。
- 用戶提交更新該文件然後將其保存的部分。
如果我在步驟3中使用repository.save()方法,我將丟失文檔中未綁定到表單的所有數據。使表單負責整個文檔是脆弱的,所以這似乎是MongoTemplate的findAndModify()方法派上用場的地方。
要使用findAndModify()方法,我創建了支持toMap()方法的Form對象,該方法將Form對象的屬性作爲Map並刪除一些字段(例如class和id)。這給我一個Map,它只包含我關心Form對象的字段。將對象ID和此映射傳遞給我自定義存儲庫上的update()方法,構建可傳遞給findAndModify()方法的Query和Update對象。
使用這種方法,我可以將字段添加到我的對象容易,只擔心實例時,有場我不想從形式發佈更新。未保留表單未處理的文檔字段。使用Repository和MongoTemplate似乎仍然有點複雜,所以我想知道是否有更好的例子來說明如何處理這個問題。在使用Mongo和Spring MVC時(至少),這似乎應該是一致的模式。
我創建展示我是如何實現在GitHub上這個模型的樣本項目。 Spock測試顯示如何使用save()更新文檔將按照預期和我的update()方法吹走字段。
https://github.com/watchwithmike/diner-data
什麼是其他人的部分更新處理使用的Spring MVC和Spring數據文件的時候在做什麼?
的想法是不採取一切用戶提供和它推到數據庫中。用戶唯一可以提供的是表單中的數據字段。對於我的簡單示例,我的表單擴展了我的模型對象,但這不是必需的。我也可以在我的toMap()方法中排除「用戶提供的」字段。我在自定義存儲庫中創建的update()方法確實使用MongoTemplate來查詢和更新,但是來自JPA/Hibernate,這看起來好像比我預期的代碼多一點,我想知道是否有更好的方法,或者這只是Mongo具有更大靈活性的副作用。 – watchwithmike
@watchwithmike你有能力解決這個問題嗎? –
@VishwasShashidhar我結束了使用,你可以在其中您可以配置爲使用MongoDB中的[JHipster(https://jhipster.github.io/)應用程序找到的模式。在[創建實體頁)[https://jhipster.github.io/creating_an_entity.html]提供的項目確實對實體面什麼的概述,你只需要確保將其配置爲使用MongoDB的,而不是的JPA。我只是使用JHipster作爲參考,而不是從它開始我的整個項目。希望有所幫助。 – watchwithmike