我有MongoDB的Spring网络应用程序。目前,我总是永久删除数据库中的数据。
@Repository
public class SessionRepository extends CrudRepository implements SessionService {
...
@Override
public void insert(Session session) {
saveRoom(session);
getTemplate().insert(session);
}
@Override
public void delete(Session session) {
getTemplate().remove(session);
}
...
}
将此更改为软删除的好方法是什么?
-----------------编辑1 -------------------
我现在理解我应该做的事情,感谢Sarath Nair。但我不确定如何在Spring中实现它。我有一个Session对象:
@Document(collection = "session")
public class Session {
@Id
private String id;
private Date startDate;
private Date endDate;
//I just put this here
private boolean deleted = false;
public boolean isDeleted() {
return deleted;
}
public void setDeleted(boolean deleted) {
this.deleted = deleted;
}
...
}
我希望字段boolean isDeleted
出现在数据库中,但我不想通过网络服务发送该信息。
@Transient
并不好,因为这个字段不会出现在数据库中,也不会出现在HTTP响应中。现在我在HTTP响应中发送deleted: false
。
我应该如何编辑Session类?
答案 0 :(得分:2)
在集合中添加一个名为is_deleted
的字段。为新文档插入is_deleted
作为false
。删除时,只需将此值更新为该文档的true
即可。每当您需要从集合中读取文档时,请将is_deleted : false
传递给集合。
答案 1 :(得分:1)
带有“isDeleted”字段的解决方案无效,因为@DbRef仍会检索“isDeleted”记录,我也在解决这个问题。
对于第二个问题,您可以使用GSON自定义SpringHttpMessageConverters来隐藏“isDeleted”字段。