Я создал отношение @ManyToMany с тем же объектом.Правильный способ удалить объект из списка @ManyToMany
Вот моя сущность:
@Entity
@Table(name = "user")
public class User extends BaseEntity implements Serializable {
...
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "table_friends", joinColumns =
@JoinColumn(name = "userId"), inverseJoinColumns =
@JoinColumn(name = "friendId"))
private List<User> friends;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "table_friends", joinColumns =
@JoinColumn(name = "friendId"), inverseJoinColumns =
@JoinColumn(name = "userId"))
private List<User> friendsof;
Я создал несколько «пользователей» и добавили их в список друзей:
User u1 = new User();
User u2 = new User();
User u3 = new User();
u1.getFriends().add(u2);
u1.getFriendsof().add(u2);
u1.getFriends().add(u3);
u1.getFriendsof().add(u3);
Когда я удалить друга из списка u1.getFriends().remove(u3)
, все в порядке , Но когда я хочу удалить пользователя из базы данных u3.remove()
, друзья u1 все те же, хотя уже в списке друзей друга правильно.
- Можно ли как-то обновить список после удаления пользователя?
- И если да, то как я могу узнать, какой список друзей мне нужно обновить?
Редактировать: Также мне кажется, что я должен удалить (cascade = CascadeType.ALL), потому что когда я удаляю u1, удаляет все парные элементы. Это правильное поведение?
Все каскады, которые я уже удалил. Когда дело доходит до удаления, я использую EntityManager em.remove (u). Но он не работает, как я ожидал, потому что после em.remove (u3), когда я проверяю базу данных (от администратора MySQL), u3 не существует, однако он все еще существует в u1.friends. Исчезает после перезапуска программы. Любая идея, почему так поздно? – galica
Хм, это странно. Я попытался удалить запись в своем приложении, и все отношения обновлены должным образом. ^^ Думаю, вы должны обновить свой вопрос с этим странным поведением. Я уверен, что кто-то еще сможет вам помочь. –
Можете ли вы поделиться, как вы это делаете? – galica