【问题标题】:Removing entity with cascade使用级联删除实体
【发布时间】:2014-07-17 01:46:44
【问题描述】:

代码:

@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 吗?我希望它能够工作,这样如果我删除教师,课程就会自动删除。

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

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

【问题讨论】:

    标签: java jakarta-ee jpa


    【解决方案1】:
    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 关系和持久性框架)这两个)

    【讨论】:

    • 非常感谢,级联删除工作完美。如果我有@ManyToMany 关系,如果我想持久化实体,我的3 个问题是我必须做什么。
    • 我很高兴它有效。编辑了我对问题 3 的回答。如果您需要,我可以找到一个真实的例子来帮助澄清它
    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多