![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| garbuz |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
MisterCleric, после нескольких перечитываний разобрался, в том, что ты хотел до меня донести - недельный отдых дает о себе знать, мозг еще не включился
Итак по делу. А допустим у меня есть несколько сущностей, который содержат коллекцию пользователей. Хочу я удалить одного пользователя из базы. Мне придется сперва из всех этих коллекций удалить пользователя, а потом уже удалить его из базы? Ерунда какая-то получается. MisterCleric, что скажешь про orphan deletion? Я что-то почитал, но если честно что-то не очень понял. Встает такой вопрос. Если столько проблем с этими коллекциями, удалением элементов etc. Надо ли вообще эти коллекции? В чем удобство?
Сразу отпадает проблема с ленивыми коллекциями и удалением элементов. Удалил
И нигде больше не вылезет этот application. Или я не прав? Короче я запутался |
||||||
|
|||||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет. Слушай, давай ты почитаешь
Java Persistence with Hibernate страница 273. А потом попытаемся разобраться. Вряд ли я смогу своими словами более толково объяснить, чем там написано. Все ты рассуждаешь правильно. И про коллекции и про ленивость, но у меня одно замечание: Зачем так наворачивать в одном PersistenceContext такую логику, что у тебя будет куча сущностей с коллекциями OneToMany да еще так, что придется убивать одну из сущностей, что может быть в этих коллекциях? Последний твой пример абсолютно верный: но он естественно, будет работать верно, если ты ленивую коллекцию позовешь после удаления. Да еще, по-моему, придется перед вызовом ленивой коллекции или сразу после удаления вызвать
для насильного вызова всех предыдущих перзистенс-операций. Так как INSERT/DELETE/UPDATE по-умолчанию планируются для вызова при коммите транзакции. -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| garbuz |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Ну видимо логика не очень удачная получилась. Есть много ленивых коллекции. Категория - приложения, пользователь - заявки, пользователь - сообщения etс. У некоторых сущностей получается по несколько коллекций. Все и правда получется как-то слишком наворочено. Вот я и думаю, может вообще отказаться от них. Ну наверно так и буду делать.
Получится, что ассоциации у меня будут не bidirectional, а undirectional. Цитата из книги
|
||||
|
|||||
| MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Может с логикой и все нормально. Бывает же такое как тернарное соединение и иногда без него никуда, особенно, если надо писать приложение на уже готовую базу. Проблема здесь заключается в том, как много сущностей и их связок ты пытаешься использовать в одном PersistenceContext, может надо подумать о чем-то дискретном: одна бизнес-операция с транзакцией и PersistenceContext, а в ней немного кода использующего базу на все вот эти связки, что ты назвал. Врядли при работе с категориями тебе придеться работать с сообщениями пользователей.
Не всегда это плохо. У меня тут по каскадному удалению была тема. И как раз bidirectional выручил -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
| garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Да, чувствуется, что не хватает теоритических знаний :(
Насколько я понимаю, PersistenceContext - это область памяти, где хранятся мои объекты в рамках одной транзакциb или сессии. Верно? Если так, то естественно в одном контексте не будет использоваться так много сущностей. Я понял, что ты хотел сказать. Ладно, вечером попробую поэксперементировать с тестами. Еще отпишу чего-нить |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Да ты знаешь: не всегда. У меня получилась такая логика в приложении, что уже не рад: банк, программы страхования, группы рисков, тарифы, опросники, ответы на опросы, полис, физ. лицо. И иногда получалось такое несуразное, что мама не горюй: так оно не укладывалось в голове. В одной транзакции удалял ответ из коллекции - было все ОК(Это логика анкеты). В другой транзакции по логике "невидимых вопрос" вызвал тот же метод удаления ответа из коллекции получил эксепшн, что-то типа in detached state. В общем надо как-то приводить логику своего приложения к какому-то нормализованному виду, как это делается в базе введение примари кеев одним полем. Но на это все надо времени, естественно... -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |