java - 删除多对一关系不会持久

标签 java hibernate jpa

我正在尝试从多对一关系中删除实体。它不会抛出任何错误,但似乎该项目没有被删除,我不知道为什么。这些是我的类(class):

客户端实体:

public class Client extends BaseEntity<Long> {

    private String name;
    private String email;
    private LocalDate dateOfBirth;
    private LocalDate dateOfRegister;

    @OneToMany(mappedBy = "client", cascade = CascadeType.ALL, fetch =
            FetchType.EAGER)
    private Set<Rental> rentals = new HashSet<>();

    ..............
    }

电影实体:

public class Movie extends BaseEntity<Long>{

    private String title;
    private int year;
    private int duration;
    private String genre;
    private double imdbRating;
    private String trailerLink;

    @OneToMany(mappedBy = "movie", cascade = CascadeType.ALL, fetch =
            FetchType.EAGER)
    private Set<Rental> rentals = new HashSet<>();

    ..................
}

租赁(链接)实体:


public class Rental implements Serializable {

    @Id
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    @JoinColumn(name = "movie_id")
    private Movie movie;

    @Id
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    @JoinColumn(name = "client_id")
    private Client client;

    @Column(name = "dateRented")
    private LocalDate dateRented;

    @Column(name = "dateDue")
    private LocalDate dateDue;

     .............
}

主键类:

public class RentalPK implements Serializable {
    private Movie movie;
    private Client client;
}

在 Controller 中,我执行以下操作:

@Override
    public void deleteRental(RentalPK rentalPK) {
        try {
            rentalRepository.deleteById(rentalPK);
        } catch (Exception e) {
            throw e;
        }
    }

有人可以解释一下为什么不删除吗?

最佳答案

解决了!看来这是因为 Movie 和 Client 实体中的 CascadeType.ALL 。似乎 CascadeType.ALL 还包含 CascadeType.PERSIST ,它表示链接实体(在我的例子中是租赁)只能从父级中删除。因此,我通过将 CascadeType.ALL 替换为 CascadeType.REMOVE 解决了该问题。

编辑:我不知道这是否是确切的解释,但它有效。

关于java - 删除多对一关系不会持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56208927/

相关文章:

java - 防止在 hibernate 中插入特定列

mysql - 根据 SQL 和 hibernate 映射中另一个表中引用行到我的表的 count() 设置列的值

java - JPQL ManyToMany 查询问题(加入类)

java - JP QL - 一对多关系中的过滤结果

Java - 带有 ImageIcon 的 JLabel 上的 setLocation/Bounds 不适用于另一个类

java - Spring 测试 - @ContextConfiguration 无法加载资源

spring - Hibernate 实体可序列化

JAVA JPA - 保留项目中所有对象的常规解决方案

java - 无法设置用户来运行服务

java - 在android中只从字符串中获取数字