Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate, когда происходит запись в базу? 
:(
    Опции темы
batigoal
Дата 8.6.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Допустим, есть такой код:
Код

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.getCurrentSession();

session.beginTransaction();
Something something = new Something();
session.save(something);                 // 1
session.getTransaction().commit();       // 2

sessionFactory.close();                 // 3


В какой момент произойдет реальное обращение к базе, т.е. сетевое взаимодействие - на строчке 1, 2 или 3? Или это зависит от конфигурации Hibernate'а? 

Это сообщение отредактировал(а) Lamer George - 8.6.2006, 10:23


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
tux
Дата 8.6.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 11
Всего: 132



Цитата(Lamer George @  8.6.2006,  15:21 Найти цитируемый пост)
В какой момент произойдет реальное обращение к базе, т.е. сетевое взаимодействие - на строчке 1, 2 или 3? Или это зависит от конфигурации Hibernate'а? 

Вообще, насколько я понимаю, Hibernate собирает все запросы в пул и по исполнении transaction.commit() запускает их все пачкой. То есть, все выполняется в строчке 2. Точно не в строчке 3, там код под это не заточен. Но, поскольку, это строчка 2, то здесь есть нюансы. Вообще говоря, вызов 
Код

session.getTransaction();

и 
Код

Transaction tr = session.beginTransaction();

это не одно и то же. Если тебя в принципе эти нюансы не волнуют, то на этом остановимся. Если больше никто ничего умного не напишет, завтра утром выдам продолжение. smile 
PM MAIL Skype GTalk Jabber YIM   Вверх
batigoal
Дата 8.6.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Цитата(tux @  8.6.2006,  18:49 Найти цитируемый пост)
Если тебя в принципе эти нюансы не волнуют, то на этом остановимся.

Вообще говоря, волнуют. Меня серьезно интересует эта технология - и идеологически, и в прикладном плане (она, как мне кажется, довольно органично вписалась бы в наше решение). Да еще и EJB3, как я понял, заточены под работу с Hibernate. 
И у меня масса вопросов, но задавать их все тут будет просто бестактно smile

Цитата(tux @  8.6.2006,  18:49 Найти цитируемый пост)
завтра утром выдам продолжение. smile

Жду с нетерпением. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
tux
Дата 9.6.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 11
Всего: 132



Честно говоря я и сам не понял что это хотел сказать про методы. smile Видимо то, что эти два вызова - почти одно и то же. Дело в том, что у Hibernate нет вложенных транзакций и все вызовы beginTransaction() будут возвращать один и тот же объект транзакции (естественно, до вызова commit() или rollback()).

Насчет того, что обращение к базе будет в строке 2, это верно. 

Уже давно в голове витает мысль написать несколько статей по Hibernate поскольку к нему интерес довольно велик, однако этому мешает отсутствие свободного времени. Надеюсь через некоторое время я это вре-таки сделаю. Тем более актуально, что на русском языке материалов мало. 
PM MAIL Skype GTalk Jabber YIM   Вверх
batigoal
Дата 9.6.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Спасибо за ответ.

Цитата(tux @  9.6.2006,  12:17 Найти цитируемый пост)
Уже давно в голове витает мысль написать несколько статей по Hibernate поскольку к нему интерес довольно велик, однако этому мешает отсутствие свободного времени. Надеюсь через некоторое время я это вре-таки сделаю. Тем более актуально, что на русском языке материалов мало.  

Да. Я тут подумал о том, что можно сделать выжимку из их Getting Started, и положить в FAQ (со ссылкой, разумеется). Правда, там не всё понятно - например, я так и не понял, что они хотели сказать об отношениях many-to-many. Но спрашивать пока нет смысла, сначала покурю мануал smile 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
chief39
Дата 9.6.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 5
Всего: 77



Честно говоря.... кажется что в строке 1 могут быть тоже обращения к базе...
То есть ФИЗИЧЕСКИ данные будут передаваться СУБД и она будет выполнять инструкции. Но не комиттить.
А при роллбэке произойдёр полный роллбэк объектный  + банальный роллбэк в СУБд для данных, которые успели обработать.
Надо это как-то протестить.
Но мне кажется, что в хибернейте предусмотрели такую асинхронность в целях производительности... 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
chief39
Дата 9.6.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 5
Всего: 77



Честно говоря.... кажется что в строке 1 могут быть тоже обращения к базе...
То есть ФИЗИЧЕСКИ данные будут передаваться СУБД и она будет выполнять инструкции. Но не комиттить.
А при роллбэке произойдёр полный роллбэк объектный  + банальный роллбэк в СУБд для данных, которые успели обработать.
Надо это как-то протестить.
Но мне кажется, что в хибернейте предусмотрели такую асинхронность в целях производительности...


Цитата(Lamer George @  8.6.2006,  22:29 Найти цитируемый пост)
Да еще и EJB3, как я понял, заточены под работу с Hibernate. 

Скорее ВМЕСТО идеи энтити бинов 2.0(мать их за ногу!!!) они слизали для этих целей идею хибернейта. То есть, фактически, сделали СВОЙ хибернейт по образу и подобию... smile

ЗЫ: На следующей неделе буду пробовать джибосс 4.0.4 и еджиби 3.0 в деле.
Если что-то путёвое выйдет - расскажу.
 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
batigoal
Дата 9.6.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Цитата(chief39 @  9.6.2006,  14:52 Найти цитируемый пост)
Надо это как-то протестить.

Протестить, конечно, можно. Но хотелось бы быть уверенным. Ведь результат моего теста не гарантирует, что это поведение будет всегда одинаковым. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
chief39
Дата 9.6.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 5
Всего: 77



Цитата(Lamer George @  9.6.2006,  13:57 Найти цитируемый пост)
что это поведение будет всегда одинаковым.  

А по идее и не должно быть.... Если я верно предполагаю.
Если много операций - наверное, начнёт раньше сбрасывать, чтоб потом огромный кусок данных не гнать по сети за один раз.
Это на совести реализаторов хибернейта по идее - в зависимости от чего и когда происходит сброс  в СУБД. И, скорее всего оно как-то зависит от нагрузки, частоты однотипных обращений и проч. и проч. А в доке у них это явно не оговорено? Может где-то в мэйллистах есть?

Хотя, не исключено, что они не заморачивали себе голову и всё происходит при коммите. 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
batigoal
Дата 9.6.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



Цитата(chief39 @  9.6.2006,  15:11 Найти цитируемый пост)
А в доке у них это явно не оговорено?

Пока не нашел, но где-то наверняка должно быть. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
tux
Дата 9.6.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 11
Всего: 132



Цитата(chief39 @  9.6.2006,  18:34 Найти цитируемый пост)
кажется что в строке 1 могут быть тоже обращения к базе...

Я тоже на самом деле не уверен, что там вызовов никогда не бывает. Вероятно, что все зависит от реализации адаптера Hibernate для конкретной СУБД. В Hibernate можно включить выдачу выполняемых запросов на консоль. Так вот, для PostgreSQL, MySQL и Hypersonic перечень выполняемых запросов вываливается только после выполнения commit(). Хотя надо бы, конечно, заглянуть в код чтобы точно знать механизм того, как обрабатывается транзакция. 
PM MAIL Skype GTalk Jabber YIM   Вверх
pvo
Дата 10.6.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.10.2005
Где: Мск

Репутация: нет
Всего: 7



Цитата(Lamer George @  9.6.2006,  13:57 Найти цитируемый пост)
Но хотелось бы быть уверенным

Цитата(tux @  9.6.2006,  17:44 Найти цитируемый пост)
заглянуть в код

Ребят, ведь тем и хороши опенсорсные продукты - тем, что все можно посмотреть в коде. Можно продебажить ...
И иметь уверенность в том, что тул работает так, а не иначе smile

 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.1116 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.