2015-10-19 129 views
0

我有两个实体表和一个关系表为两个实体。关系定义的像以下:一对多批量级联删除

实体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类似。

我在这里失踪了什么?

回答

0

你对这个映射有什么问题/错误?

我看到一些需要改变的映射。您应该在@OneToMany映射上删除@JoinColumn注释。您在多对一方面已经有了指定的@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; 
    ... 
} 
+0

它没有工作。 Entity1Entity2Relation条目不会消失。 –

+0

请出示您的代码,了解如何删除(显示涉及的所有实体)。也许,一些DAO代码。 – Ish