![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| vns955 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 21.11.2006 Репутация: нет Всего: нет |
Всем здрям!
Я использую Spring MVC. После формы редактирования некот. таблицы я вызываю форму отображения этой таблицы (контроллер SOListController). Т.е. я попадаю на formBackingObject метод:
Код метода getSOByParameters:
Что самое странное, когда я нажимаю обновить в браузере и снова попадаю в formBackingObject метод, то тут уже считывается то что надо Для любых манипуляций с БД использую исключительно Hibernate и делаю везде commit(). Что ещё удивляет, я в проекте использовал уже аналогичное отображение данных (даже запрос очень похож), только с другой таблицей, и там все ОК Для отладки и разработки использую Eclipse Galileo. ORM: Hibernate 3.0. Подскажите плз в чем тут дело. Заранее спасибо! |
||||
|
|||||
| MaxPayneC |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 18.2.2006 Репутация: 3 Всего: 9 |
Рекомендую сохранить в классе HibernateUtil SessionFactory один раз, например в блоке static { }. И второе, не как рекомендация, а просто для справки - лично я получал сессию вызовом openSession() и закрывал ее после окончания работы.
|
|||
|
||||
| garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
vns955, раз уж используете спринг, то используйте его и для работы с хибернейтом, вам не придется создавать сессии в ручную.
Опишите еще раз ситуацию, только чуть понятнее |
|||
|
||||
| vns955 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 21.11.2006 Репутация: нет Всего: нет |
SOListController - контроллер для вывода на экран записей некотор. таблицы Salesorder. Метод formBackingObject кидает эти строки (список) на jsp, ну а там уже JSTL рулит. Но эта страница просмотра имеет также кнопку Add New Sales Order и соотв. кнопки Edit возле каждой существующей записи для правки. Так вот, если я нажимаю Add New либо Edit для редактирования существующей записи, то я попадаю в соответствующие другие контроллеры (наприм. Edit) и после правки, наприм. записи и сохранения я попадаю снова в SOListController (так и задумано), но там я вижу не сохраненную запись, а старую (до редактирования). Причем в базе уже измененная запись (смотрю через MySQL concole клиент). Возможность кеширования бразуером и т.п. исключено, т.к. через отладчик я попадаю в formBackingObject и там вижу что берутся через метод getSOByParameters старые данные.
То же можно сказать и о добавлении записи, я ее тоже не вижу в форме просмотра. Вот фрагмент из конфигурации spring:
|
|||
|
||||
| garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Во-первых, метод formBackingObject в большинстве случаев предназначен для возврата объекта формы - нового, существующего. Во-вторых, чтобы доставать все данные ваших сущностей, для их отображения например в таблице, используйте метод referenceData. В-третьих, не стоит плодить множество контроллеров для работы с одной сущностью, можно и одним обойтись, если сразу одним не получится, то двумя. В-четвертых, попробуйте в конфиге sessionForm указать как false. |
|||
|
||||
| vns955 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 21.11.2006 Репутация: нет Всего: нет |
Дык, контроллер я один использую EditSOController для добавления и редактирования, а бины разные. Ну а на просморт записей - другой, а по другому имхо никак, потому что задачи разные и логика соот-но. Добавлено через 5 минут и 54 секунды Получилось когда я заюзал openSession(). Почему так? Теперь я по всему проекту должен изменить? Я делал по книге Agile Java Development with Spring, Hibernate and Eclipse, Anil Hemrajani там именно было так (getCurrentSession()). Получается ошибка? |
|||
|
||||
| MaxPayneC |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 18.2.2006 Репутация: 3 Всего: 9 |
Разница в том, что openSession() гарантированно создает новую сессию, т.е. "читает" состояние базы данных, а getCurrentSession
|
|||
|
||||
![]()
|
| Правила форума "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. |