Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java tools & IDE's > Hibernate |
Автор: batigoal 8.6.2006, 10:21 | ||
Допустим, есть такой код:
В какой момент произойдет реальное обращение к базе, т.е. сетевое взаимодействие - на строчке 1, 2 или 3? Или это зависит от конфигурации Hibernate'а? |
Автор: batigoal 8.6.2006, 22:29 |
Вообще говоря, волнуют. Меня серьезно интересует эта технология - и идеологически, и в прикладном плане (она, как мне кажется, довольно органично вписалась бы в наше решение). Да еще и EJB3, как я понял, заточены под работу с Hibernate. И у меня масса вопросов, но задавать их все тут будет просто бестактно ![]() Жду с нетерпением. |
Автор: tux 9.6.2006, 11:17 |
Честно говоря я и сам не понял что это хотел сказать про методы. ![]() Насчет того, что обращение к базе будет в строке 2, это верно. Уже давно в голове витает мысль написать несколько статей по Hibernate поскольку к нему интерес довольно велик, однако этому мешает отсутствие свободного времени. Надеюсь через некоторое время я это вре-таки сделаю. Тем более актуально, что на русском языке материалов мало. |
Автор: batigoal 9.6.2006, 11:44 | ||
Спасибо за ответ.
Да. Я тут подумал о том, что можно сделать выжимку из их Getting Started, и положить в FAQ (со ссылкой, разумеется). Правда, там не всё понятно - например, я так и не понял, что они хотели сказать об отношениях many-to-many. Но спрашивать пока нет смысла, сначала покурю мануал ![]() |
Автор: chief39 9.6.2006, 13:34 |
Честно говоря.... кажется что в строке 1 могут быть тоже обращения к базе... То есть ФИЗИЧЕСКИ данные будут передаваться СУБД и она будет выполнять инструкции. Но не комиттить. А при роллбэке произойдёр полный роллбэк объектный + банальный роллбэк в СУБд для данных, которые успели обработать. Надо это как-то протестить. Но мне кажется, что в хибернейте предусмотрели такую асинхронность в целях производительности... |
Автор: chief39 9.6.2006, 13:52 |
Честно говоря.... кажется что в строке 1 могут быть тоже обращения к базе... То есть ФИЗИЧЕСКИ данные будут передаваться СУБД и она будет выполнять инструкции. Но не комиттить. А при роллбэке произойдёр полный роллбэк объектный + банальный роллбэк в СУБд для данных, которые успели обработать. Надо это как-то протестить. Но мне кажется, что в хибернейте предусмотрели такую асинхронность в целях производительности... Скорее ВМЕСТО идеи энтити бинов 2.0(мать их за ногу!!!) они слизали для этих целей идею хибернейта. То есть, фактически, сделали СВОЙ хибернейт по образу и подобию... ![]() ЗЫ: На следующей неделе буду пробовать джибосс 4.0.4 и еджиби 3.0 в деле. Если что-то путёвое выйдет - расскажу. |
Автор: batigoal 9.6.2006, 13:57 |
Протестить, конечно, можно. Но хотелось бы быть уверенным. Ведь результат моего теста не гарантирует, что это поведение будет всегда одинаковым. |
Автор: chief39 9.6.2006, 14:11 |
А по идее и не должно быть.... Если я верно предполагаю. Если много операций - наверное, начнёт раньше сбрасывать, чтоб потом огромный кусок данных не гнать по сети за один раз. Это на совести реализаторов хибернейта по идее - в зависимости от чего и когда происходит сброс в СУБД. И, скорее всего оно как-то зависит от нагрузки, частоты однотипных обращений и проч. и проч. А в доке у них это явно не оговорено? Может где-то в мэйллистах есть? Хотя, не исключено, что они не заморачивали себе голову и всё происходит при коммите. |
Автор: batigoal 9.6.2006, 14:28 |
Пока не нашел, но где-то наверняка должно быть. |
Автор: tux 9.6.2006, 17:44 |
Я тоже на самом деле не уверен, что там вызовов никогда не бывает. Вероятно, что все зависит от реализации адаптера Hibernate для конкретной СУБД. В Hibernate можно включить выдачу выполняемых запросов на консоль. Так вот, для PostgreSQL, MySQL и Hypersonic перечень выполняемых запросов вываливается только после выполнения commit(). Хотя надо бы, конечно, заглянуть в код чтобы точно знать механизм того, как обрабатывается транзакция. |
Автор: pvo 10.6.2006, 00:30 |
Ребят, ведь тем и хороши опенсорсные продукты - тем, что все можно посмотреть в коде. Можно продебажить ... И иметь уверенность в том, что тул работает так, а не иначе ![]() |