2015-10-19 2 views
0

У меня есть 2 таблицы сущностей и одна таблица отношений для обоих объектов. Отношения определяются как следующие:Одноразовый пакетный каскад 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 удален, я хочу, чтобы его соответствующие записи отношения также были удалены и аналогичны с Entity 2.

Что мне здесь не хватает?

ответ

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; 
    ... 
} 
+0

Это не сработало. Элементы Entity1Entity2Relation не уходят. –

+0

Пожалуйста, покажите свой код о том, как сделать удаление (показывая все вовлеченные сущности). Возможно, некоторый код DAO. – Ish

Смежные вопросы