一对多批量级联删除

时间:2015-10-19 18:10:55

标签: java hibernate jpa

我有两个实体表和两个实体的关系表。关系定义如下:

实体1:

@JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
    @JoinColumn(name = "id", updatable = false, insertable = false)
    private Set<Entity1Entity2Relation> relations;

实体2

@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
@JoinColumn(name = "id", updatable = false, insertable = false)
private Set<Entity1Entity2Relation> relations;

关系表:

@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
@JoinColumn(name = "propertyId", updatable = false, insertable = false)
private Entity1 obj1;

@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
@JoinColumn(name = "structureId", updatable = false, insertable = false)
private Entity2 obj2;

如果删除了其中一个entity1,我希望删除相应的关系条目,并与实体2类似。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您对此映射有哪些问题/错误?

我看到一些需要改变的映射。您应该删除@JoinColumn映射上的@OneToMany注释。您已经在多对一方面具有指定的@JoinColumn,因此无需在一对多方面指定它。通常,您将@JoinColumn置于关系的拥有方。在一对多/多对一双向关系中,您将@JoinColumn放置在使用@ManyToOne映射的字段上。

此外,要指定双向关系的反面,您的@OneToMany注释应具有mappedBy属性。

应用我的建议会导致ff。代码:

@Entity
public class Entity1 {
    ...
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE}, mappedBy="obj1")
    private Set<Entity1Entity2Relation> relations;
    ...
}

@Entity
public class Entity2 {
    ...
    @JsonIgnore
    @OneToMany(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE}, mappedBy="obj2")
    private Set<Entity1Entity2Relation> relations;
    ...
}

@Entity
public class Entity1Entity2Relation {
    ...
    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
    @JoinColumn(name = "propertyId", updatable = false, insertable = false)
    private Entity1 obj1;

    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.REMOVE})
    @JoinColumn(name = "structureId", updatable = false, insertable = false)
    private Entity2 obj2;
    ...
}