gpt4 book ai didi

java - JPA:单向多对一和级联删除

转载 作者:IT老高 更新时间:2023-10-28 11:42:36 24 4
gpt4 key购买 nike

假设我有一个 单向 @ManyToOne 关系,如下所示:

@Entity
public class Parent implements Serializable {

@Id
@GeneratedValue
private long id;
}

@Entity
public class Child implements Serializable {

@Id
@GeneratedValue
private long id;

@ManyToOne
@JoinColumn
private Parent parent;
}

如果我有一个父 P 和子 C1...Cn 引用回 P,在 JPA 中是否有一种干净漂亮的方法来自动删除删除 P 时的子 C1...Cn(即 entityManager.remove(P))?

我正在寻找的是类似于 SQL 中的 ON DELETE CASCADE 的功能。

最佳答案

如果您使用hibernate 作为您的JPA 提供者,您可以使用注释@OnDelete。此注释将向关系添加触发器ON DELETE CASCADE,它将子项的删除委托(delegate)给数据库。

例子:

public class Parent {

@Id
private long id;

}


public class Child {

@Id
private long id;

@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private Parent parent;
}

使用此解决方案,从子级到父级的单向关系足以自动删除所有子级。此解决方案不需要任何监听器等。此外,像 DELETE FROM Parent WHERE id = 1 这样的 JPQL 查询将删除子代。

关于java - JPA:单向多对一和级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7197181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com