java - 无法删除 Spring Hateoas 中的资源

标签 java mysql spring-boot spring-data-jpa spring-hateoas

我有一个 spring boot 应用程序,它使用 Spring HATEOAS 公开资源。除 DELETE 外,所有 GET、POST、PATCH 方法都可以正常工作。当我向资源发送删除请求时,它返回 204 No content 响应,但是当我请求所有资源时,我删除的项目再次出现。控制台上没有记录异常。 postman 请求没有错误。

我要删除的资源与另一个 POJO 具有多对一关联。但是那些没有多对一(有些有一对多)的资源正在被删除。

模式实体

@Entity
@Table(name="Modes")
public class Mode { 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;

    @OneToMany(mappedBy = "mode", fetch=FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Expense> expense;

    public Mode() {}

    @Autowired
    public Mode(String name,Set<Expense> expense) {
        this.name = name;
        this.expense = expense;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


}

类别实体

@Entity
@Table(name="Categories")
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;

    @OneToMany(mappedBy = "category", fetch=FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Expense> expense;

    public Category() { }

    @Autowired
    public Category(String name, Set<Expense> expense) {        
        this.setName(name);     
        this.expense = expense;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

费用实体

@Entity
@Table(name="Expenses")
public class Expense {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;    
    private BigDecimal amount;

    @ManyToOne
    @JoinColumn(name="categoryId")
    private Category category;  

    @ManyToOne
    @JoinColumn(name="modeId")
    private Mode mode;

    private Date date;

    public Expense() {}

    public Expense(String name, BigDecimal amount, Category category, Mode mode, Date date) {
        this.name = name;
        this.amount = amount;
        this.category = category;
        this.mode = mode;
        this.date = date;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public Mode getMode() {
        return mode;
    }

    public void setMode(Mode mode) {
        this.mode = mode;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

}

我使用的存储库

public interface CategoryRepository extends CrudRepository<Category, Integer> {

}

public interface ExpenseRepository extends CrudRepository<Expense, Integer> {

}


public interface ModeRepository extends CrudRepository<Mode, Integer> {

}

费用的删除请求无效

我用MySQL做数据库,用Postman测试URL

最佳答案

尝试从级联中更改 cascade = CascadeType.ALL)

并设置 cascade = CascadeType.REMOVE, orphanRemoval = true 它应该可以工作

阅读文档了解更多信息: https://docs.oracle.com/cd/E19798-01/821-1841/giqxy/

关于java - 无法删除 Spring Hateoas 中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48288391/

相关文章:

php mysql 计数列

mysql - 在 MySQL 中连接表 A 的行和表 B 的列

java - 如何配置此 Spring-Boot 应用程序以使用 IAM 角色而不是 key 和 secret ?

java - Spring Boot 2.0服务: messages delivered from Rabbit mq but not reaching java code

spring-boot - 为什么 spring boot 应用程序不断从配置服务中获取配置?

java - ConcurrentLinkedQueue代码解释

java - RESTful Web 服务返回类型

java - 在Java中,我可以创建一个名称由字符串传递的对象吗?

java - 如何通过套接字连接发送实例?

MySql查询查找不在时间范围之间的记录