小编ain*_*cat的帖子

使SpringData仅更新POJO的更改字段

我在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,还可以使用其他框架。

java spring mongodb spring-data spring-data-mongodb

7
推荐指数
2
解决办法
3522
查看次数

标签 统计

java ×1

mongodb ×1

spring ×1

spring-data ×1

spring-data-mongodb ×1