休眠状态不允许删除子元素

时间:2018-12-10 21:25:19

标签: java spring hibernate spring-boot jpa

假设我有2个这样的实体

class Parent {
    String name;
    Child children;
}

class Child {
    String name;
    Parent parent; 
}

问题是,如果它与任何父级关联,我都不允许从数据库中删除子级->父级中的子级不能为null。有什么办法吗?每当我尝试从db中删除孩子时,我都可以使用一些forloop来检查它(例如查询所有父母并检查他们的childId),但这似乎不是很有效。

2 个答案:

答案 0 :(得分:1)

您的问题定义不明确,但是我假设您使用的是@Entity之类的标签,因为您放置了Hibernate和jpa标签。

在这种情况下,您应该使用@OneToMany关系(父->子)和@ManyToOne在(子->父)中。如果这样做,其中之一将存储id(或您用作id列的任何值)。当您执行addParent方法和removeParent(来自Child)时,只是不要删除另一个而已。

答案 1 :(得分:1)

您的样本可能应该是:

public class Parent {
    @Id
    @GeneratedValue
    private long id;

    @OneToMany(optional=false)
    private Set<Child> children;

    // getter/setter
    ...
}


public class Child {
    @Id
    @GeneratedValue
    private long id;
    private String name;

    // getter/setter
    ...
}

因此,请看以下注释:@OneToMany(optional = false),它用于强制执行NOT NULL约束。

在这里您可以找到更多信息:http://docs.jboss.org/hibernate/core/4.2/manual/en-US/html_single/#d5e5674