我在MongoDB上使用Spring Data。我能够保存POJO,对其进行更新。一切正常。但是现在我想在db中仅刷新POJO的更改字段。
例如,我有用户实体。我创建用户,然后不时更新lastActiveDate。
@Document
class User {
@Id
BigInteger ID;
String email;
String name;
Date lastActiveDate;
}
User user = new User();
user.setName("User");
user.setEmail("example@example.com");
repository.save(user);
User toUpdUser = repository.findOne(userId);
toUpdUser.setLastActiveDate(new Date);
repository.save(toUpdUser );
Run Code Online (Sandbox Code Playgroud)
在第二次保存中,我只想更新lastActiveDate字段而不是整个用户,因为大型实体上的文档更新可能很慢。我也想知道changeset(至少是一组更新字段)。
目前,我没有找到执行此操作的API。唯一的可能是在设置器中手动处理它(存储更改的字段集并手动存储),但是它看起来很丑陋且不被支持。另一个选择是在bean上使用AOP来达到相同的结果,但是IFAIK Spring Data不会将POJO视为Spring bean,而是使用构造函数,因此在用AOP加载POJO之后将只是POJO。
UPD:我正在寻找没有显式mongo api(或类似mongo的api)调用的方法。我的实体拥有数十个领域,客户几乎可以更改其中任何一个。我只想存储更改的字段,并能够获取更改集以执行一些检查。实体存储与字段更新之间的差异过大-5ms与0.2ms
当然,我可以使用CRUD跟踪器支持创建自己的POJO映射器实现,但是已经存在,为什么不尝试一下。而且我不仅可以使用SpringData,还可以使用其他框架。