|
|
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
Поделитесь опытом, на чем реализуют бизнес транзакции в связке с хибернейтом. Простой пример, есть объект, у него set one-to-many, добавляю в коллекцию объекты, пытаюсь сохраниться. Сохранение не прошло, откатываю транзакцию БД, а как восстановить прежнее состояние объекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 17:35:38 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
гыы никак. создать новую сессию выбрать их заново. если повезёт он будет в кэше точнее: после такого пользоваться сессией нельзя. (в сессии есть entityentry в них есть начальное состояние на момент выборки) ну и если обнаружен concurrencyexception то какой смысл возвращаться к начальному состоянию объекта? если эту версию ужо не закомитить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 18:18:45 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
А почему новую сессию? Можно же вроде текущую форсировать на вычитку объекта из базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 18:20:05 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
exppгыы никак. создать новую сессию выбрать их заново. если повезёт он будет в кэше точнее: после такого пользоваться сессией нельзя. (в сессии есть entityentry в них есть начальное состояние на момент выборки) ну и если обнаружен concurrencyexception то какой смысл возвращаться к начальному состоянию объекта? если эту версию ужо не закомитить? Я и спрашиваю, как это реализовывать, чтобы не изобретать велосипед :) Вот выбрал наивный пользователь из базы строку, поредактировал 20 полей в этой и других, относящейся к этой строке, ушел минут на 10 чайку попить. А в это время злодей взял и поменял в этой строке пару полей. Вернулся наивный пользователь к компу, а ему бац -- ексепшен так и сяк, вбивай данные по новой. Так не пойдет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 18:27:55 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
где то было что сессией после exception'а пользоваться нельзя. могу ошибаццо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 18:31:22 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
exppгде то было что сессией после exception'а пользоваться нельзя. могу ошибаццо Сессия новая для сохранения, она вообще каждый раз новая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 18:33:11 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
Каждый раз новая сессия не всегда хорошо. Так а не понятно как именно ты хочешь разрулить ситуацию? Вот есть пользователь, котрый поменял данные, но не смог сохранить - Optimistic Lock Exception Данные которые он вбил все ещё могут жить в UI, это с хибером вообще никак не связано. Тебе надо перечитать сосотяние из базы что навбивал другой пользователь? Или как ты хочешь разрулить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 19:01:49 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
вооо в этом то и вопрос подобное разруливание слишком специфично для каждого приложения. поэтому светит это велосипедом (в нормальном смысле). что получится расскажи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 19:09:15 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКаждый раз новая сессия не всегда хорошо. Так а не понятно как именно ты хочешь разрулить ситуацию? Вот есть пользователь, котрый поменял данные, но не смог сохранить - Optimistic Lock Exception Данные которые он вбил все ещё могут жить в UI, это с хибером вообще никак не связано. Тебе надо перечитать сосотяние из базы что навбивал другой пользователь? Или как ты хочешь разрулить? Каждый раз новая сессия -- необходимость. Приложение модульное, а коннекшнов на всех не хватит. Чтобы разрулить ситуацию нужно в зависимости от ситуации предложить пользователю 1) посмотреть как данные сейчас выглядят в базе (здесь проблемы нет), 2) предложить принять изменения злодея и начать редактировать заново (тоже все ок), 3) предложить перезаписать изменения злодея, 4) померджить свои изменения с текущими. Для п. 3 и 4 необходимо знать предыдущее состояние объекта. А теперь более сложная ситуация -- никто строку не менял, просто умер коннекшн к базе во время обновления. Как теперь вообще откатиться в интерфейсе на старые значения не перечитывая объект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 20:18:06 |
|
||
|
Hibernate и бизнес-транзакции
|
|||
|---|---|---|---|
|
#18+
Guest1234567890Каждый раз новая сессия -- необходимость. Приложение модульное, а коннекшнов на всех не хватит. Тогда нужно уточнять что такое "каждый раз". Какждый раз на бизнес транзакцию или каждый раз на операцию с БД? Guest1234567890 3) предложить перезаписать изменения злодея По-моему в той же сессии можно получить значение потенциального противника и затереть его своим. Там только надо смотреть как версии разруливаются. Guest12345678904) померджить свои изменения с текущими. Для п. 3 и 4 необходимо знать предыдущее состояние объекта. Зачем? Нужно знать то что пользоователь хотел сохранить, это есть либо на UI, либо в бинах, перед сохранением. И знать что сейчас реально лижит в базе. Это можно получить из сессии, точно метод не помню. Что лежало в базе до изменений обоих пользователей уже никому не интересно. Guest1234567890А теперь более сложная ситуация -- никто строку не менял, просто умер коннекшн к базе во время обновления. Как теперь вообще откатиться в интерфейсе на старые значения не перечитывая объект? Это что-то вообще не ясно. Конекшн умудрился здохнуть во время короткой транзакции? Ну так это глобальный файлур. Чего с ним боротся? Данные которые пытались срхранить никуда не исчезли, а создать новое соединение и перечитать последнее состояние разве проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2007, 11:22:27 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34795677&tid=2144640]: |
0ms |
get settings: |
13ms |
get forum list: |
19ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
66ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 316ms |
| total: | 510ms |

| 0 / 0 |
