gpt4 book ai didi

java - 使用 Morphia Java 在每次更新时更新 mongo 中的 updated_at 属性

转载 作者:搜寻专家 更新时间:2023-10-30 23:34:13 25 4
gpt4 key购买 nike

我想为文档的每次更新更新 MongoDB 中的 update_at 属性,以便稍后我可以根据上次提交的 update_at 检索文档。对于这种情况,我遇到了两种方法。

  1. 在每个 DAO 调用中更新 update_at

    public void updateMemberDetails(Long memberId, Sring email) {
    UpdateOperations<Member> ops = getDs().createUpdateOperations(Member.class);
    Query<Member> query = basicQuery(memberId);
    ops.set("email", email);
    ops.set("update_at", new Date());
    getDs().update(query, ops);
    }
  2. 其他方式是在模型中调用Mongo的生命周期方法(http://mongodb.github.io/morphia/1.4/guides/lifeCycleMethods/)

    @PrePersist
    public void prePersist() {
    update_at = 新日期();
    }

问题:-方法 1 工作得很好,但方法 1 的唯一缺点是我必须在每个我不想添加的 DAO 更新方法中添加 ops.set("update_at", new Date());在每个方法中更新。

方法2中prePersist()方法只在操作db.save()时调用,在db.update()操作中不调用prePersist()方法。所以当 DAO 方法调用 db.update() 时,我无法更新日期。

最佳答案

这比使用 update() 性能差,因为它会加载对象以进行保存,但是:

public void updateMemberDetails(Long memberId, Sring email) {
Datastore ds = getDs();
UpdateOperations<Member> ops = ds.createUpdateOperations(Member.class);
QueryImpl<Member> query = basicQuery(memberId);
Member member = query.get();
member.setEmail(email);
ds.save(member);
}

您还可以选择将验证逻辑添加到 setEmail() 函数中。

注意:get() 方法通过 QueryResults 接口(interface)在 QueryImpl 中,而不是 Query 的一部分> 界面。

关于java - 使用 Morphia Java 在每次更新时更新 mongo 中的 updated_at 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45185308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com