我需要对存储在面向文档的数据库(MongoDB)中的(简单)Java对象图进行版本控制。对于关系数据库和Hibernate,我发现了Envers,并且对可能性感到非常惊讶。是否有类似的东西可以与Spring Data Documents一起使用?
我发现this post概述了我的想法(以及更多...)关于存储对象版本,我目前的实现工作方式类似,它将对象的副本存储在一个单独的历史集合中,带有时间戳,但我想改进这一点以保存存储空间。因此,我想我需要在对象树上实现一个“diff”操作和一个“merge”操作来重建旧的对象。有没有什么库可以帮助我实现这个操作?
编辑:高度赞赏任何使用MongoDB和版本管理的经验!我认为很可能不会有Spring Data解决方案。
3条答案
按热度按时间xggvc2p61#
这就是我最终实现MongoDB实体版本控制的方式。感谢StackOverflow社区的帮助!
equals
方法,以便它测试数据库主键而不是子属性(否则,JavaObjectDiff将无法识别集合元素中的属性更改)。以下是我用于版本控制的实体(删除getter/setter等):
下面是saveChangeHistory操作:
这是它在MongoDB中的样子:
编辑:以下是访问者代码:
gcuhipw92#
我们使用了一个基本实体(在这里我们设置了ID,创建+最后更改日期,...)。在此基础上,我们使用了一个通用的持久化方法,它看起来像这样:
delta方法看起来像这样(我会尽量让它尽可能通用):
我们的delta实体看起来像这样(没有getters + setters,toString,hashCode和equals):
希望这能帮助你开始:-)
wkftcu5l3#
看起来Javers是这项工作的正确工具,请参阅http://javers.org/documentation/features/#javers-repository
Javers在概念上是一个用于域对象版本控制的VCS,由JSON和MongoDB支持