Каскадное удаление из той же таблицы - PullRequest
0 голосов
/ 05 января 2011

Привет! Я использую 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;

}

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

@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. первая запись корректно удаляется с помощью опции каскада, но я получаю сообщение об ошибке, потому что во второй записи есть ссылка на пользователя с id = 1 в таблице subscribed_users. Есть ли возможность каскадного удаления и второй записи?

Спасибо

1017 * Dawid *

1 Ответ

2 голосов
/ 05 января 2011

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

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