powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем откат транзакции в Hibernate, если он реально не может откатить изменения в БД?
5 сообщений из 5, страница 1 из 1
Зачем откат транзакции в Hibernate, если он реально не может откатить изменения в БД?
    #33986257
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При использовании

Код: plaintext
1.
2.
3.
<id name="id" type="integer" unsaved-value="null">
			<column name="id" sql-type="int" not- null ="true" />
			<generator  class ="identity" />
		</id>

Hibernate игнорирует FlushMode.COMMIT и при вызове Session.save() делает
flush(), в результате чего запись ложится в БД.

Пусть в одной транзакции создается оъект Test и далее возбуждается исключение (by zero). При откате транзакции по логике объект Test не должен
остаться в базе, но он уже там и теперь его только удалять, запомнив идентификатор и вручную?

Ниже простой код и маппинг. Поделитесь соображениями плз.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
 public   void  test3()  throws  Exception
            {

                 try 
                    {

                        Hibernate3Support.beginTransaction();

                        Hibernate3Support.currentSession().setFlushMode(FlushMode.NEVER);

                        Test test =  new  Test();

                        test.setName("t1");

                        Hibernate3Support.currentSession().save(test);

                         try 
                            {

                                 int  i= 1 / 0 ;

                            }
                         catch  (Exception e)
                            {
                                Hibernate3Support.rollbackTransaction();
                                 throw  e;
                            }

                        Hibernate3Support.commitTransaction();

                    }  finally 
                    {
                        Hibernate3Support.closeSession();
                    }

            }

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
< class  name="Test" table="test">

		<id name="id" type="integer" unsaved-value="null">
			<column name="id" sql-type="int" not- null ="true" />
			<generator  class ="identity" />
		</id>

		<property name="name" type="string">
			<column name="name" not- null ="false" />
		</property>
		
		<property name="txt" type="string">
			<column name="txt" not- null ="false" />
		</property>




	</ class >
...
Рейтинг: 0 / 0
Зачем откат транзакции в Hibernate, если он реально не может откатить изменения в БД?
    #33987539
pretender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поэкспериментировал. Сначала действительно долго удивлялся, а потом понял. Проверьте поддерживает ли Ваша база данных (или ее jdbc драйвер) транзакции.
Hibernate реально вызывает rollback у jdbc connection. А вот работает ли этот самый роллбэк для конкретной базы - это вопрос.
Я экспериментрирую на MySql. У меня в начале экспериментов была база данных MyIsam. И ей пофигу транзакции, она их не поддерживает. И ситуация была удивительная, роллбэк не давал эффекта. А вот когда я переделал ее на INNODB (поддерживает транзакции) все встало на свои места! И роллбэк стал работать как надо.
...
Рейтинг: 0 / 0
Зачем откат транзакции в Hibernate, если он реально не может откатить изменения в БД?
    #33988505
мимо шел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
во всем J2EE помоему таким образом реализованны транзакции ... хотя опять же по моему J2EE версии 3 как раз на хибернейте и реализован.
...
Рейтинг: 0 / 0
Зачем откат транзакции в Hibernate, если он реально не может откатить изменения в БД?
    #33988852
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мимо шел... хотя опять же по моему J2EE версии 3 как раз на хибернейте и реализован.

Почти. На хибернейте основана реализация CMP Persistence в JBoss.
...
Рейтинг: 0 / 0
Зачем откат транзакции в Hibernate, если он реально не может откатить изменения в БД?
    #33989071
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Мне почему-то казалось, что откат делает сам Hibernate. Проверил с InnoDB, действительно заработало. Видимо, нужно было внимательнее читать документацию по hibernate.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем откат транзакции в Hibernate, если он реально не может откатить изменения в БД?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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