java - 删除父实体而不删除子实体 (jpa)

标签 java hibernate jpa

我正在尝试删除父级列表而不删除子级

父级:

@Entity
public class Parent {
    @Id
    @Column(name = "PARENTID")
    private Long id;

    @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent")
    private Set<Child> childs = new HashSet<Child>();

 ...
}

child :

@Entity
public class Child {
    @Id
    @Column(name = "CHILDID")
    private Long id;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="PARENTID", nullable = false)
    private Parent parent;

  ...
}

我所做的是使用 HQL 查询更新所有子级,然后也使用 HQL 查询删除父级列表。

问题是这种方式太重了,有没有使用JPA的简单解决方案?

最佳答案

您可以在以下部分中将 Cascade 设置为不删除

 @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent")
private Set<Child> childs = new HashSet<Child>();

按如下方式编辑注释:

 @OneToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, mappedBy = "parent")

以及您需要的任何其他 CascadeType 选项(请参阅 CascadeType Enums )。这将使当您删除 parent 时, child 也不会被删除。

关于java - 删除父实体而不删除子实体 (jpa),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20980759/

相关文章:

java - 目标运行时 WildFly 在 maven 测试后解包

applet - JDK 6 和 Linux

hibernate - 部署因Wildfly Gradle和Hibernate而失败

java - Hibernate 使用 javax.sql.DataSource 实例

java - Joincolumn 返回空值

java - java中删除链表中的重复项

java - 用 Java 编写的开源朴素贝叶斯分类器

java - 如何解决 Struts2 与 Hibernate 中的 "java.lang.NoClassDefFoundError: org/hibernate/util/IdentitySet"错误?

java - spring-data 带下划线的属性名称不可转义,如文档所述

java - 即使客户端没有更改值,hibernate 也会设置脏标志(并发布更新)