Вопрос по JPA - cascade при отношении @ManyToOne

 
 
 
Сообщения:24
О_о я удивлен людям с таким энтузиазмом защищающим "харошее" каскадное удаление. По самой логике БД так делать нельзя.
 
 
Сообщения:11
Skipy:
Это означает, что мне ПРИДЕТСЯ указывать связь one-to-many. А она мне не нужна.


Тогда, как я уже говорил, остается воспользоваться каскадным удалением на уровне СУБД.

Skipy:
Исчезновение марки означает, что я перестал ее продавать. Склад распродан, марку нужно убрать из прайс-листов. Соответственно, и все модели. Обратное неверно. Так что пример корректен.


Некорректно поставлена была задача. Зачем вам удалять марку при удалении автомобиля? Я понимаю, что вы удивлены тому, что каскадное удаление не работает общепринятым путем.

Если посмотреть на возможности по каскадному изменению зависимых сущностей в jpa, то там же можно указать сохранение, вставку и обновление из БД. Для них общепринятая логика каскадного удаления не подходит. Возможно этим руководствовались создатели спецификации. А может это legacy решение, тянущееся от предыдущих кривоватых версий.

Quote:
Кстати, а больше вы недостатков в jpa не видите? А то непривычно для вас каскадное удаление, по-моему, не тянет на смертный грех.


Skipy:
О других недостатках (фундаментальных, присущих всем ORM) я говорил не раз и не два.


С удовольствием узнал бы ваши мысли по этому поводу. Я и сам не считаю jpa идеалом.

Guran:
О_о я удивлен людям с таким энтузиазмом защищающим "харошее" каскадное удаление. По самой логике БД так делать нельзя.


Вброс в тему оценил. Я вообще-то не защищаю "харошее" каскадное удаление.
 
 
Сообщения:6977
puz:
Некорректно поставлена была задача. Зачем вам удалять марку при удалении автомобиля? Я понимаю, что вы удивлены тому, что каскадное удаление не работает общепринятым путем.


Именно это мне и НЕ надо - удалять марку. Собственно, тема и началась как непомерное удивление тому, что каскадное удаление не работает общепринятым способом. Всё, что меня интересовало - мотивы авторов такого нововведения.

С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
 
 
Сообщения:404
Quote:
Всё, что меня интересовало - мотивы авторов такого нововведения.

Банальные - хочется сделать не так, как есть, а оригинально. ;)
Но вообще, история "удаляю одну книгу - куда-то пропадает весь книжный магазин" меня порадовала ;)
 
 
Сообщения:149
Так аннотация @ManyToOne(cascade = CascadeType.ALL) и не является описанием ограничений внешнего ключа. Почему я так часто встречаюсь с убеждением, что объявление этой аннотации == ON UPDATE CASCADE ON DELETE CASCADE при описании FOREIGN KEY.
 
 
Сообщения:342
Могу предположить что это сделано ради быстродействия, сами посудите если вы объявляете каскадную операцию в "SimpleObject" то при удалении/изменении "ObjectType" ORM придется пробежать рефлексией по всем полям "ObjectType", посмотреть все связанные объекты и их классы потом в этих классах поискать есть ли аннотации на каскадирование и если есть то только тогда произвести каскадирование, а если их нет то все эти действия пройдут впустую, а если мы указываем каскадирование на стороне "ObjectType" ORM будет необходимо пройти только о полям ObjectType и если там найдется объявление каскада то найдется, если нет то дальше по связям не будет необходимости бежать и искать каскад так как мы знаем что каскад объявляется на стороне хозяина связи и ни как иначе.
 
 
Сообщения:342
А что касается конкретно вашего случая то как по вашему с технической точки зрения ORM должен узнать что при удалении ObjectType должен удалится SimpleObject ведь в ObjectType даже ссылки на него нет. Так что на мой взгляд поведение JPA более чем логичное.
 
 
Сообщения:4
Если в текущей ситуации грохнуть объект SimpleObject (а заодно вместе с ним и ObjectType), то удалятся ли остальные объекты SimpleObject или нужно прописывать
@ManyToOne(cascade = CascadeType.ALL, orphanRemoval="true")? И сработает ли это вообще?
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет