[英]One-To-Many Batch Cascade delete
我有兩個實體表和兩個實體的一個關系表。 關系定義如下:
實體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;
如果實體1中的一個被刪除,我希望它的對應關系條目也被刪除,並且與實體2類似。
我在這里想念的是什么?
您在使用此映射時遇到什么問題/錯誤?
我看到一些需要更改的映射。 您應該刪除@JoinColumn
上標注@OneToMany
映射。 您已經在多對一側指定了@JoinColumn
,因此無需在一對多側進行指定。 通常,您將@JoinColumn
放在關系的擁有方。 在一對多/多對一的雙向關系中,將@JoinColumn
放置在與@ManyToOne
映射的字段上。
此外,指定雙向關系的反向端,你的@OneToMany
注解應該有一個mappedBy
屬性。
應用我的建議,將導致失敗。 碼:
@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;
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.