powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Service и бизнес логика
17 сообщений из 17, страница 1 из 1
Spring Service и бизнес логика
    #38756936
Stvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нашел поиском, не придумал как сформулировать. Вот есть у меня сервис который работает с базой, сохраняет, удаляет и тп.
Я передаю ему объект для удаления, у которого есть предки. Значит я сначала должен удалить его из предка, сохранить предка и сохранить объект. И вот в момент сохранения возникает ошибка и откат транзакции. А сами объекты уже изменены. Как правильно реализуются такие вещи?
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38756964
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stvan,

делать всё в одной транзакции.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38756993
Stvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, да, это понятно. Все в одной транзакции и все откатывается. То есть база не изменилась, но объекты то не откатываются. Надо как-то состояние запоминать и в случае отката восстанавливать. Чувствую, что где-то что-то не допонимаю. В базовых примерах такого не рассматривают, может кто ткнет носом в подходящую статейку.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757003
Stvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот например, у меня есть дерево. Перетаскиваю элемент в другое место.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Override
@Transactional
public void move(RockGroup rockGroup, RockGroup targetRockGroup) {
        RockGroup oldParent = rockGroup.getParent();
        if (oldParent != null) {
            oldParent.removeChildren(rockGroup);
            repository.save(oldParent);
        }
        if (targetRockGroup != null) {
            targetRockGroup.addChild(rockGroup);
            repository.save(targetRockGroup);
        } else {
            repository.save(rockGroup);
        }
}



И вот на последнем save выскакивает исключение, все откатывается, но в oldParent уже нет rockGroup.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757027
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stvan,

в метод удаления передавать не объект, а идентификатор
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757031
Sherst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77,

Погуглите memento pattern.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757035
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sherst,

погуглил, и чего? зачем усложнять, если для удаления записи из БД достаточно знать ее идентификатор?
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757039
Stvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в удалении, а в том что у меня связанные объекты, и мне связи в программе надо поддерживать в актуальном состоянии. Тупо удалить я и по объекту могу.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757040
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stvan,

Какие вы объекты собрались откатывать? Какой у них scope? Объясните. Сессийные? Так их не надо менять до комита транзакции.
Request Scope? Так request, обычно, целиком откатывается, кроме случая вложеных транзакций. О каких объектах речь?
Объектами связаными с базой вообще ORM занимается. Spring здесь при чем тогда?
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757043
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StvanДело не в удалении, а в том что у меня связанные объекты, и мне связи в программе надо поддерживать в актуальном состоянии. Тупо удалить я и по объекту могу.
Какие объекты? Что за объекты? Какой у них жизненый цикл\scope\области видимости?
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757059
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StvanДело не в удалении, а в том что у меня связанные объекты, и мне связи в программе надо поддерживать в актуальном состоянии. Тупо удалить я и по объекту могу.
заметил принципиальное не понимание, итак

1. в первом вашем сообщение вы обозначили проблему удаления, чтобы это решить - вам достаточно сделать метод DeleteMyObject(int id), и в нем прописать запрос на удаление из БД. Если метод выдаст исключение, то вызывающая сторона получит сообщение об ошибке, но копия объекта у вызывающей стороны не изменится - проблема решена. В случае если ваш объект содержит вложенные и при удалении с ними тоже надо что-то сделать - для этого есть такая штука как каскадное обновление/удаление, реализуется либо через вашу СУБД, либо через вашу технологию доступа к данным (как именно - читайте документацию)

2. потом была обозначена проблема с перемещением в дереве, у вас сервис, значит есть потребитель, они могут быть на разных компьютерах, значит необходим канал передачи данных, например это xml через http, это автоматически означает, что при передачи объекта в метод move - на стороне сервиса создается копия объекта, и ее изменения никоим образом не влияют на копию, которая находится на вызывающей стороне - проблемы нет
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757067
Stvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошие вопросы вы задаете господа :). Я тут только разобраться пока пытаюсь и многого не понимаю, а вы навалились.
На спринге только сервисы и транзакции. Объекты обычные entity, не спринговые бины.
Приложение десктопное на swing, база локальная. Объекты в деревьях и таблицах, вот там мне и надо отражать результаты перемещений и удалений. Пример изменения иерархии в дереве выше.
Меня не конкретное решении интересует, а как это делается во взрослом приложении, шаблон. Поэтому не особо важно как там у меня.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757073
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StvanХорошие вопросы вы задаете господа :). Я тут только разобраться пока пытаюсь и многого не понимаю, а вы навалились.
На спринге только сервисы и транзакции. Объекты обычные entity, не спринговые бины.
Приложение десктопное на swing, база локальная. Объекты в деревьях и таблицах, вот там мне и надо отражать результаты перемещений и удалений. Пример изменения иерархии в дереве выше.
Меня не конкретное решении интересует, а как это делается во взрослом приложении, шаблон. Поэтому не особо важно как там у меня.
С этого надо было начать. 2-tier. В этом случае при откате транзакции актуальное состояние просто перечитывается из БД.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757078
Stvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВ этом случае при откате транзакции актуальное состояние просто перечитывается из БД
Понятно, спасибо. Ожидал чего-то более эээ..., интелектуального :)
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757090
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StvanПонятно, спасибо. Ожидал чего-то более эээ..., интелектуального :)
Чем проще тем лучше. Так как процесс апдейта базы и так для юзера долгий, то добавить туда перечитывание не такая уж и проблема.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757158
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stvan,
Если БД локальная, можете и на коммите всё перечитывать. Вы же не строите параллельно всё дерево рядом с БД.
Если виден 1 узел из миллиона листочков.
...
Рейтинг: 0 / 0
Spring Service и бизнес логика
    #38757243
Stvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Service и бизнес логика
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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