Удаление элементов из таблицы соединений в спящем режиме при удалении объектов - PullRequest
0 голосов
/ 11 августа 2011

У меня есть 2 класса с отношением @ManyToMany

первый класс: клип второй класс: местоположение

основная идея заключается в том, что клип может быть доступен в нескольких местах

это класс клипа.

@Entity
@Table(name = "CLIP")
public class Clip {

    private Long id;
    private List<Location> locations;

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @ManyToMany( )
           @JoinTable(name="CLIP_LOCATION",joinColumns=@JoinColumn(name="CLIP_ID",nullable=false),inverseJoinColumns=@JoinColumn(name="LOCATION_ID",nullable=false) )
    @ForeignKey(name="FK_CLIP_LOCATION",inverseName="FK_LOCATION_CLIP")
    public List<Location> getLocations() {
        return locations;
    }
    public void setLocations(List<Location> locations) {
        this.locations = locations;
}
}

это класс Location

@Entity
@Table(name = "LOCATION")
public class Location {
}

это не двунаправленное отношение

Мой вопрос: когда я удаляюместоположение из пользовательского интерфейса, я хочу, чтобы соответствующая строка в объединяемой таблице автоматически удалялась,

Можно ли это сделать?

какую аннотацию следует использовать?

Обратите внимание, что класс Location и класс Clip также используются и в других отношениях

Спасибо, Maayan. Использую ли я неправильные отношения?

1 Ответ

1 голос
/ 11 августа 2011

Это невозможно.Вы должны удалить местоположение из списков местоположений перед удалением местоположения.Поскольку ваша ассоциация является однонаправленной, вам нужно выполнить запрос, чтобы найти все клипы, доступные в этом местоположении, и удалить местоположение из каждого клипа.

Другой вариант - выполнить собственный запрос SQL для удаления строк.из таблицы соединений, но имейте в виду, что объекты, загруженные в сеансе, не будут знать об этом изменении.

...