如何用MongoDB和Spring实现软(逻辑)删除?

时间:2015-11-26 08:58:21

标签: java spring mongodb

我有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类?

2 个答案:

答案 0 :(得分:2)

在集合中添加一个名为is_deleted的字段。为新文档插入is_deleted作为false。删除时,只需将此值更新为该文档的true即可。每当您需要从集合中读取文档时,请将is_deleted : false传递给集合。

答案 1 :(得分:1)

带有“isDeleted”字段的解决方案无效,因为@DbRef仍会检索“isDeleted”记录,我也在解决这个问题。

对于第二个问题,您可以使用GSON自定义SpringHttpMessageConverters来隐藏“isDeleted”字段。