java - Spring Data Rest - 软删除

标签 java spring rest spring-data spring-data-rest

我一直在使用 spring data rest 没有任何问题,但现在我有一个要求,即当用户对给定实体执行 DELETE 操作时,即 DELETE /accounts/<id>我需要在数据库上设置一个标志,将该实体标记为已删除,但我确实想保留记录

基本上这意味着我需要在数据库中执行 UPDATE 而不是 DELETE 操作。我找不到任何方法来覆盖 delete(ID) 方法的 spring 行为。

部分代码:

@Entity
@Table(name = "account")
public class Account {

    /*
Default value for this field is false but when a receive a 
DELETE request for this entity i want to turn this flag 
to false instead of deleting the record.
    */
    @Column(name = "deleted")
    private boolean deleted;

...
}

帐户存储库

@RepositoryRestResource
public interface AccountRepository extends JpaRepository<Account, Integer> {

}

有什么想法吗?

最佳答案

尝试创建自定义存储库,看看效果如何

http://docs.spring.io/spring-data/jpa/docs/1.9.0.RELEASE/reference/html/#repositories.custom-implementations

但是删除并不是您需要更改逻辑的唯一地方。 我看到两种处理标志要求的方法:

  1. 在您的实体定义中有一个额外的标志,并在删除时更新它。

    在这种情况下,您需要小心并重写所有现有查询,以确保不会返回已删除的实体,并记住这种结果分离,适用于所有 future 的实体。 (尽管您可以在低级别破解 SpringData,并自动附加此标志)。

  2. 从原始集合中删除实体并将其添加到另一个集合中,在完全处理之前存储实体。

    在这种情况下,您将需要额外的逻辑来管理处置集合,但这对查询逻辑没有影响。您可以通过将 entity listener 添加到您的 JPA 定义 ( http://docs.spring.io/spring-data/jpa/docs/1.9.0.RELEASE/reference/html/#jpa.auditing )

    来与您现有的应用程序集成

关于java - Spring Data Rest - 软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32514871/

相关文章:

java - JBoss Seam 可以在使用登录页面后重定向用户的 "Last Visited Page"吗?

java - 使用 SPARQL 构造查询部分 RDF 图

java - 当url在斜杠后有参数数据时,如何编写 Controller 方法的签名?

mysql - Azure 尝试创建 MySQL 数据库时失败

c# - 通过Azure Function处理多个请求

java - 将事物声明为 final 会加速 Eclipse 代码分析和编译吗?

java - 从整数/字节[]获取枚举标志

java - JAXB Marshall 泛型类型的 Map 结构

java - Oracle DB - 对特定批处理的未初始化集合的 Java 引用

ReST 低延迟 - 我应该如何在上传挂起时回复 GET?