Каскадное удаление из той же таблицы

Привет, я использую JPA2 с реализацией Hibernate, и у меня есть простое сопоставление:

@Entity
@Table(name = "users")
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @OneToMany(mappedBy = "user", cascade = ALL)
  private List<SubscribedUser> subscribedUsers;

}

и вторая таблица (SubscribedUser) с идентификатором класса:

@Entity
@Table(name = "subscribed_users")
@IdClass(SubscribedUserId.class)
public class SubscribedUser {
  @Id
  @ManyToOne
  @JoinColumn(name = "id_user", referencedColumnName = "id")
  private User user;

  @Id
  @ManyToOne
  @JoinColumn(name = "id_subscribed_user", referencedColumnName = "id")
  private User subscribedUser;
}

Предположим, у нас есть 2 записи в таблице subscribed_users: 1.

user | subscribed_user
1    | 2

2.

user | subscribed_user
2    | 1

Проблема в том, что когда я удаляю пользователя с id = 1. первая запись удаляется правильно с опцией каскада, но я получил ошибку, потому что во второй записи в таблице subscribed_users есть еще ссылка на пользователя с id = 1 . Есть ли возможность каскадного удаления и второй записи?

Спасибо

Давид


person Dawid    schedule 04.01.2011    source источник


Ответы (1)


Насколько я понимаю, вы не можете сделать это автоматически без двунаправленной связи между SubscribedUser, поэтому добавьте что-то вроде этого:

@OneToMany(mappedBy = "subscribedUser", cascade = CascadeType.REMOVE)
private Set<SubscribedUser> dependentUsers;
person axtavt    schedule 05.01.2011