【发布时间】:2015-12-14 16:36:31
【问题描述】:
我在 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 );
在第二次保存中,我只想更新 lastActiveDate 字段而不是整个用户,因为文档更新在大型实体上可能很慢。我也想知道变更集(至少一组更新的字段)。
目前我还没有找到 API 来做到这一点。唯一的可能是在设置器中手动处理它(存储更改的字段集并手动存储),但它看起来很难看且不支持。另一种选择是在 bean 上使用 AOP 来实现相同的结果,但 IFAIK Spring Data 不会将 POJO 视为 Spring bean 并使用构造函数,因此在使用 AOP 加载 POJO 后将只是 POJO。
更新: 我正在寻找没有显式 mongo api(或 mongo-like api)调用的方法。我有数十个字段的实体,客户几乎可以更改其中的任何一个。我只想存储更改的字段并能够获取更改集以执行一些检查。实体存储和字段更新之间的差异太大 - 5ms vs 0.2ms
当然,我可以创建自己的 POJO 映射器实现并支持 CRUD 跟踪器,但它已经存在,为什么不尝试一下。而且我可以使用另一个框架,而不仅仅是 SpringData。
【问题讨论】:
标签: java spring mongodb spring-data spring-data-mongodb