powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA CASCADE
18 сообщений из 43, страница 2 из 2
JPA CASCADE
    #39300361
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паша01Слушай, ты может сразу все расскажешь?
не. Я сам размышляю что лучше, что хуже.
Нет однозначности). Да и постановка странная.
Паша01Решение может и не верх элегантности, но реализуется максимум за 5 минут.
да.
+1
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300363
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паша01И в нем с помощью все той же переменной oldOthersSize
+1
)
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300378
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Хаха, мне показалось, что это он написал, ник не посмотрел )))
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300410
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паша01Petro123пропущено...

а если юзверь просто играется с коллекцией? Т.е. коммит - сохранить не нажимал, а идёт по мастеру страничкам в одной сессии.
Тогда зазря уйдёт по мылу сообщение об удалении 2-х объектов.

Слушай, ты может сразу все расскажешь? Судя по твоему комментарию, ты банально можешь добавить поле oldOthersSize в Entity.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class Entity {
   
   @OneToMany(Cascade = ALL)
   Set<OtherEntity> others;

   @Transient
   int oldOthersSize;
}


Инициализируей его перед тем, как добавить объект Entity в свой граф. Когда юзер нажимает кнопку Сохранить, тупо сравниваешь размер текущей коллекции с переменной oldOthersSize. И все. Вот так легко узнаешь, что удалилось именно 2 элемента. Решение может и не верх элегантности, но реализуется максимум за 5 минут.
Это уродство)))
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300419
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Это уродство)))
Когда костыль является единственным решением, он становится эталонным)))
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300425
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно не единственное, похоже придется при мердже сначала вытаскивать из базы еще раз и сравнивать ручками расхождения в списках.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300426
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Это уродство)))
какая постановка, такое и решение).
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300428
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892вытаскивать из базы еще раз
сессии разные.
Что с чем сравнивать?
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300431
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Какая разница то.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300455
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Petro123,
Какая разница то.
мы пока гадаем что означает цифра 2.
1. Например, в соседней сессии параллельно юзверь из 4-х чилдрен сделал 3.
А ты тут перечитываешь из базы где тоже одну удалил.

2. У хибера механизм версии сущности тоже точно такой же. Есть поле версия и мы потом сохраняя сверяемся с базой.
Код: java
1.
2.
3.
4.
@Version
@Column(name="OPTLOCK")
public Integer getVersion() { ... }
}
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300456
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123и мы потом сохраняя сверяемся с базой.
вернее не мы, а хибер. Нам "нельзя" этот счётчик трогать.
Т.е. Паша01 вроде здраво предложил.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300469
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
1.Юзер вытащил с 4мя чайлдами. Сессия закрыта.
2.Юзер удалил (снял 2 чекбокса например) 2 чайлда в своем локальном графе.
3.Кто-то в это время из базы удалил 1 чайлда, т.е. по факту в базе сейчас уже 3, а не 4.
4.Юзер нажимает сейв.
4.1. Вытаскиваем из базы свежий список и видим что там 3.
4.2. разница != 2 => следовательно ничего не делаем, просто мерджим.

В случае если завести поле в классе, то в примере выше это условие сработает, и будет как будто он сам удалил 2 шт.

Причем здесь версионность вообще? Как ты собираешься версионность к OneToMany применять?
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300499
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no568924.1. Вытаскиваем из базы свежий список и видим что там 3.
4.2. разница != 2 => следовательно ничего не делаем, просто мерджим.
какой смысл в этом числе?
Представь, что в БД 100 юзверей постоянно меняют и правят дочек "Прописано" у ноды "Квартира".
Т.е. каждую секунду цифра меняется от 0 до 30ти.
Т.е. при сохранении эту цифру {0...30} ты с чем сравнил:
Код: java
1.
4.2. разница != 2 => следовательно ничего не делаем, просто мерджим.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300502
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Причем здесь версионность вообще? Как ты собираешься версионность к OneToMany применять?
я сказал, что Паша01 привёл метод как в версионности. На что ты выше написал - Уродство.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300504
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,
если у тебя МАКС количество дочек = 2 в Модели(БД), то это ДРУГОЕ условие и ТЗ.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300510
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,
короче, мне метод Паша01 понравился больше).
Выбирай сам. Удачи!
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300534
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще, если гарантированно нужно отправить письмо, то по срабатыванию условия должна создаваться запись в какой-то таблице, из которой отдельный процесс будет периодически выгребать записи и рассылать по ним письма. Иначе возможны ситуации либо когда записи удалятся, а письмо отправится либо наоборот - записи не удалятся, а письмо отправится.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300537
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркА еще, если гарантированно нужно отправить письмо, то по срабатыванию условия должна создаваться запись в какой-то таблице, из которой отдельный процесс будет периодически выгребать записи и рассылать по ним письма. Иначе возможны ситуации либо когда записи удалятся, а письмо отправится либо наоборот - записи не удалятся, а письмо отправится.
Да, письмо как пример, на самом деле надо вставлять запись в БД.
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA CASCADE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]