java - 使用级联删除实体

标签 java jakarta-ee jpa

代码:

@Entity
class Teacher implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;
    @Column(nullable = false)
    @NotNull
    String name;
    @OneToMany(mappedBy = "teacher",cascade = CascadeType.REMOVE)
    List<Course> courses;
}

@Entity
public class Course implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;
    @Column(nullable = false)
    @NotNull
    String name;
    @ManyToOne(cascade = CascadeType.REMOVE)
    Teacher teacher;
}

三个问题:

  1. 我必须把 CascadeType.REMOVE 放在两个实体中吗?我希望它能工作,这样如果我删除老师类(class)将被自动删除。

  2. 在我的数据库中,我的 ID 无法正常工作。我想要它,以便 id 每次递增 1,但它目前增加了一些随机数。 为什么?

  3. 我还有 2 个 @Entity 类,但具有 @ManyToMany 关系。 当我想在数据库中持久化一个新对象时,我必须做什么?

最佳答案

  1. 可能是其中一个的副本:
    JPA: Cascade remove does not delete child
    JPA 2.0 orphanRemoval=true VS on delete Cascade
    https://stackoverflow.com/questions/22237631/jpa-does-not-cascade-delete-operation-from-parent-entity-to-child-entity
    你检查过那些引用资料了吗?

  2. 需要更多情报

  3. 您可以单独持久化它们中的每一个,或者持久化类 A 的实例并附加类 B 的实例,反之亦然(假设您使用的是正确的 CascadeType@ ManyToMany 关系和理解这两者的持久性框架)

关于java - 使用级联删除实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23901411/

相关文章:

java - JPA - 是否可以将结果作为 @MappedSuperclass 的实例获得?

java - Java 中用特定类代替泛型

java - JCalendar定制

java - 最快的数组比较

java - 在java中创建变量别名

java - hibernate -CDI

java - Quartz - 在一周中的几天和时间每两周安排一次工作

java - 持久性单元的多次登录?

sql - hibernatetemplate 的批量更新有什么意义?

java - 为什么我的 spring boot gradle 项目使用 spring jpa 连接到 oracle 抛出异常?