我有两个实体表和两个实体的关系表。关系定义如下:
实体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 :(得分: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;
...
}