Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно удалить данные / 9 сообщений из 9, страница 1 из 1
19.01.2013, 12:04:05
    #38116265
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
Есть объект класса
Код: java
1.
Schet sc=new Schet();


в нем находится коллекция заказов:
Код: java
1.
2.
3.
4.
5.
6.
7.
public Collection<Zakaz> getZakazCollection() {
        return zakazCollection;
    }

    public void setZakazCollection(Collection<Zakaz> zakazCollection) {
        this.zakazCollection = zakazCollection;
    }


допустим я удаляю из коллекции
Код: java
1.
zakazCollection

пару элементов (без удаления из базы), далее вставляю коллекцию обратно в
Код: java
1.
sc

, т.е.
Код: java
1.
sc.setZakazCollection(zakazCollectionAfterDelete) 

и вызываю
Код: java
1.
manager.merge(sc)

. Вопрос, что при этом произойдет? При таком варианте удалятся ли автоматически из базы те заказы, которые я удалила из коллекции, или нужно делать по-другому: сначала удаляем элементы коллекции и из базы и уже после обновляем
Код: java
1.
sc

. Подскажите, пожалуйста, как правильно? Спасибо.
...
Рейтинг: 0 / 0
19.01.2013, 12:14:29
    #38116270
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
JulT,
чисто академический вопрос?
Т.к. - "уходя - уходи", а "удаляя - удаляй".
Поэтому фраза:
автордалее вставляю коллекцию обратно в
вставляем новые элементы? Делай логично в объектной модели, тогда ОРМ разберётся.
...
Рейтинг: 0 / 0
19.01.2013, 12:39:12
    #38116289
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
Petro123JulT,
чисто академический вопрос?
Т.к. - "уходя - уходи", а "удаляя - удаляй".
Поэтому фраза:
автордалее вставляю коллекцию обратно в
вставляем новые элементы? Делай логично в объектной модели, тогда ОРМ разберётся.
пользователь открывает счет, в нем лежат заказы, он удалил пару заказов в окошке, потом закрыл окно без сохранения проделанных операций. если я сразу реализую удаление заказов
из базы, то при следующем открытия окна у пользователя не будет возможности их увидеть, а ведь он не сохранил свои действия, т.е. они должны быть. как в таком случае поступить?
...
Рейтинг: 0 / 0
19.01.2013, 13:15:22
    #38116304
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
JulT, web или толстый клиент?
Когда юзер заходит куда-то что он может отменить, то нужно сохранять текущее состояние, чтобы потом можно было откатить его после изменений до изначального.
...
Рейтинг: 0 / 0
19.01.2013, 13:22:12
    #38116307
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
BlazkowiczJulT, web или толстый клиент?
Когда юзер заходит куда-то что он может отменить, то нужно сохранять текущее состояние, чтобы потом можно было откатить его после изменений до изначального.
клиент толстый.
т.е. получается так: он зашел, кое-что удалил (при этом я сразу же удалила это из базы), удаленные объекты сохраняю во временный ArrayList (например). далее, юзер закрывает окно, при этом не сохраняя свои действия, я беру временный ArrayList и вставляю его заново в базу, правильно?
...
Рейтинг: 0 / 0
19.01.2013, 13:49:31
    #38116323
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
JulT,
Нужно помнить, что у вас не один юзверь, а несколько ОДНОВРЕМЕННО правят данные.
Значит, перед правкой выбираем по бизнесу:
- логические блокировки
- физические
- короткие транзакции без отмены.
Последний вариант проще и надёжнее.
Логические требуют извещать что "Пользователь взял на редактирование"
Физические требуют длинной транзакции и коммит на кнопку Сохранить (нет ОРМ)
...
Рейтинг: 0 / 0
19.01.2013, 13:51:10
    #38116326
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
JulTу пользователя не будет возможности их увидеть
Удаляя - удаляй. Зачем их видеть снова?
...
Рейтинг: 0 / 0
19.01.2013, 14:24:12
    #38116346
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
JulTт.е. получается так: он зашел, кое-что удалил (при этом я сразу же удалила это из базы), удаленные объекты сохраняю во временный ArrayList (например). далее, юзер закрывает окно, при этом не сохраняя свои действия, я беру временный ArrayList и вставляю его заново в базу, правильно?
Как сделано у нас.
Юзер заходит - состояние сериализуется в byte[].
Юзер удаляет\редактирует - делает что хочет.
Вышел без сохранения или нажал Abort - состояние восстановилось из byte[].
Сохранил - объекты уехали на сервер и там сохранились изменения и удалились удаленные.

Удаление - тонкий момент. Да. Если это единичная сущность. Так кнопка [Delete] для неё отдельная и работает аналогично [Save] без возможности откатить.
А вот если сущность является элементом списка, то тут приходят на помощь Hibernate Persistent Collections. Они внутри себя хранят snapshot элементов, какими они были во время загрузки. При сохранении такой коллекции хибернейт сравнивает текущее содержимое коллеции и snapshot. Таким образом находит удаленные сущности и удаляет их в базе.

Если нет возможности протащить Hibernate на клиента, то нужно выдумывать что-то своё аналогичное. Сохранять сразу в базу, при том что вы возможно захотите откатить изменения не очень логично.

В двух-звенке можно попробовать подобное реализовать на вложеных транзакциях с комитами и откатами.
...
Рейтинг: 0 / 0
20.01.2013, 01:00:26
    #38116681
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно удалить данные
BlazkowiczJulTт.е. получается так: он зашел, кое-что удалил (при этом я сразу же удалила это из базы), удаленные объекты сохраняю во временный ArrayList (например). далее, юзер закрывает окно, при этом не сохраняя свои действия, я беру временный ArrayList и вставляю его заново в базу, правильно?
Как сделано у нас.
Юзер заходит - состояние сериализуется в byte[].
Юзер удаляет\редактирует - делает что хочет.
Вышел без сохранения или нажал Abort - состояние восстановилось из byte[].
Сохранил - объекты уехали на сервер и там сохранились изменения и удалились удаленные.

Удаление - тонкий момент. Да. Если это единичная сущность. Так кнопка [Delete] для неё отдельная и работает аналогично [Save] без возможности откатить.
А вот если сущность является элементом списка, то тут приходят на помощь Hibernate Persistent Collections. Они внутри себя хранят snapshot элементов, какими они были во время загрузки. При сохранении такой коллекции хибернейт сравнивает текущее содержимое коллеции и snapshot. Таким образом находит удаленные сущности и удаляет их в базе.

Если нет возможности протащить Hibernate на клиента, то нужно выдумывать что-то своё аналогичное. Сохранять сразу в базу, при том что вы возможно захотите откатить изменения не очень логично.

В двух-звенке можно попробовать подобное реализовать на вложеных транзакциях с комитами и откатами.
Спасибо большущее за столь развернутый ответ. Буду думать и спрашивать дальше:)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно удалить данные / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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