protected Date creationDate;
protected Date lastChange;
// Getters and setters or final setters which don't do anything,
// if you only want to allow the entity to update the values
@PrePersist
public void prePersist() {
creationDate = (creationDate == null) ? new Date() : creationDate;
lastChange = (lastChange == null) ? creationDate : new Date();
}
3 回答
您需要自己捕获上次更新时间 .
对于我的应用程序,我保留一个AuditTrail对象,它捕获AuditEvents . 这些事件发生在对象的任何插入,更新或删除上(删除在我的系统中是虚拟的,只是设置一个标志) .
对于每个AuditEvent,我会跟踪日期,经过身份验证的用户,数据库操作以及应用程序填写的说明 . 这是在PersistentObject中实现的,因此它会自动调用Mongo中保存的任何对象的任何数据库操作 .
这实际上花了很少的时间来实现,但提供了获取最后更新时间的能力,以及您可能需要的任何其他信息,以便为Mongo中的所有内容提供安全性和客户支持 .
不,MongoDB本身不存储创建或更新时间戳 . 你必须自己做(并且你已经发现,如果你使用ObjectID _id,那么你已经获得了创建日期) .
您可以使用审计跟踪实体作为@ user1530669提到(我正在调用我的delta - 代码已经在StackOverflow上的某处可用) .
或者您可以简单地保存上次更改时间 . 我通常使用基本实体来设置它,所有其他实体都扩展它(为了您的特定要求,您可以删除
creationDate
,因为lastChange
足够你):然后,在查询中,您可以添加过滤器,以便
lastChange
属性比检索限制更新 .