Удаление ManyToMany сущностей
От:
Аноним
Дата: 02.07.13 06:00
Оценка:
Использую Hibernate 4.1, Spring Data JPA 1.3.1. Сущности описаны так:
class User {
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "event_user" )
private Set<Event> events;
}
class Event {
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "events" )
private Set<User> users;
}
Задача: при удалении User удалить все event где нет других User.
Чего только не пробовал, но никак не удаляются Event. Результат один, User удаляется из таблицы event_user связь тоже удаляется.
UserRepository userRepository; // extends JpaRepository<User, Long>
EventRepository eventRepository; // extends JpaRepository<Event, Long>
...
for (Event event : user.getEvents()) {
event.getUsers().remove(user);
if (event.getUsers().isEmpty()) {
eventRepository.delete (event);
} else {
eventRepository.save(event);
}
}
userRepository.delete (user);
Подскажите что я упускаю.
Re: Удаление ManyToMany сущностей
От:
tavr
Дата: 02.07.13 06:53
Оценка:
Здравствуйте, Аноним, Вы писали:
а так:
А>А>class User {
А> @ManyToMany(cascade = CascadeType.ALL, orphanRemoval = true )
А> @JoinTable(name = "event_user" )
А> private Set<Event> events;
А>}
Re[2]: Удаление ManyToMany сущностей
От:
Аноним
Дата: 02.07.13 07:14
Оценка:
Здравствуйте, tavr, Вы писали:
T>Здравствуйте, Аноним, Вы писали:
T>а так:
А>>А>>class User {
А>> @ManyToMany(cascade = CascadeType.ALL, orphanRemoval = true )
А>> @JoinTable(name = "event_user" )
А>> private Set<Event> events;
А>>}
T>
У ManyToMany нет атрибута orphanRemoval (JPA 2.0).
Re[3]: Удаление ManyToMany сущностей
От:
tavr
Дата: 03.07.13 07:28
Оценка:
Здравствуйте, Аноним, Вы писали:
А>У ManyToMany нет атрибута orphanRemoval (JPA 2.0).
да, проглядел
попробуй сначала обновить коллекции (разорвать связи), а потом уже удадить элементы
List<Event> events2Remove = new ArrayList<Event>();
for (Event event : user.getEvents()) {
event.getUsers().remove(user);
if (event.getUsers().isEmpty()) {
events2Remove.add(event);
}
eventRepository.save(event);
}
if (!events2Remove.isEmpty()) {
for (Event event : events2Remove) {
eventRepository.delete (event);
}
}
userRepository.delete (user);
Re[4]: Удаление ManyToMany сущностей
От:
Аноним
Дата: 03.07.13 10:19
Оценка:
Здравствуйте, tavr, Вы писали:
T>попробуй сначала обновить коллекции (разорвать связи), а потом уже удадить элементы
Пробовал, не помогает. Причем когда смотрю запросы которые приходят в БД (добавляя flush() после каждой операции), то там только:
LOG: execute <unnamed>: delete from event_user where users_id=$1
LOG: execute <unnamed>: delete from users where id=$1
т.е. оно даже не пытается удалить Event.
Re[3]: Удаление ManyToMany сущностей
От:
wildwind
Дата: 03.07.13 11:29
Оценка:
Здравствуйте, Аноним, Вы писали:
А>У ManyToMany нет атрибута orphanRemoval (JPA 2.0).
Вот собственно и ответ.
Re[4]: Удаление ManyToMany сущностей
От:
Аноним
Дата: 04.07.13 02:21
Оценка:
Здравствуйте, wildwind, Вы писали:
А>>У ManyToMany нет атрибута orphanRemoval (JPA 2.0).
W>Вот собственно и ответ.
Я и не жду что оно само удалиться. Не понятно почему при ручном удалении сущностей данные не удаляются.
Re[5]: Удаление ManyToMany сущностей
On 04.07.2013 06:21, Аноним 762 wrote:
> Я и не жду что оно само удалиться. Не понятно почему при ручном удалении
> сущностей данные не удаляются.
Либо до eventR.delete(event) не доходит дело, либо баг в реализации
(Spring,Hibernate). Залезьте туда отладчиком (сырцы же доступны) и
посмотрите в чём дело — почему не генерится DELETE statement.
Кроме того, интересно что там у вас с транзакциями.
--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re: Удаление ManyToMany сущностей
От:
Аноним
Дата: 05.07.13 02:43
Оценка:
Всем спасибо за помощь.
Проблема оказалась в другой сущности которая была связана с Event и не было указано каскадное обновление.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить