| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Проблемы с Hibernate transaction.commit |
| Автор: STIM 15.12.2013, 06:32 | ||||||||||
Я использую Hibernate 4.2.4 и PostgreSQL 9.2. Проблемы с транзакциями. Сущность "Students" замаплена как многие-к-одному с сущностью "Groups" через аннотации. Когда я запускаю следующий кусок кода:
Я получаю следующий неправильный результат:
Если я закомментирую это:
Я получу правильный результат.Почему так? я же должен закоммитить транзакцию?
Мой HibernateUtil класс
|
| Автор: Samotnik 15.12.2013, 15:12 | ||
зачем этот блок?
0.Открыл транзакцию 1.Выполнил запрос 2.Коммит транзакции 3. профит |
| Автор: STIM 15.12.2013, 15:16 |
| Чтобы избавиться от ленивой инициализации. С коммитом транзакции беда, если его выполнить, то после этого ни один запрос с транзакциями не выполняется. Что делать? |
| Автор: Samotnik 15.12.2013, 16:37 |
ошибка? какая? |
| Автор: STIM 15.12.2013, 17:06 | ||||||
| В том то и дело что никакой ошибки. Как я уже в начале писал, выполняя этот код:
Я получаю следующий неправильный результат:
Хотя должен получить это. Ведь вызываю один и тот же метод, с одним и тем же входным параметром. Если я закомментирую коммит, то выводится правильно.
В чем проблема? |
| Автор: Samotnik 15.12.2013, 18:28 |
| STIM, я предположу: ты делаешь year.getStudentsFromGroup(7) в котором есть session = HibernateUtil.currentSession(); В котором сессия не открывается в случае, если она есть. Видимо, первый раз ты выгребаешь данные из сессии, а второй раз их там больше нет. Вообще метод currentSession() странный, обычно, перед каждой транзакцией нужно заново открывать сессию |
| Автор: STIM 15.12.2013, 18:52 |
| Samotnik, спасибо большое! Действительно, там крылась ошибка, я неправильно управлял сессиями. |