我试图想出了与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