| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Hibernate: сессии и транзакции |
| Автор: MaxPayneC 26.10.2009, 10:15 |
| В чем разница между сессией и транзакцией хибернейт, смотря на них как на unit of work? И зачем вообще нам нужен механизм сессий? Извиняюсь, если уже обсуждалось, не нашел ответа( |
| Автор: Quester82 26.10.2009, 12:18 | ||||
| Если коротко, то сессия это логическая единица работы с БД, которая включает в себя одну или более реальных транзакций с базе данных. Внутри хибернейта сессия нужна для того чтобы реализовать работу с persistent инстансами (сущностями). Чтобы далеко не бегать, вот тебе ответ прямо из API Hinbernate.
org.hibernate.Transaction И про транзакции
|
| Автор: MaxPayneC 26.10.2009, 14:27 |
| Хотелось бы более детальное объяснение, почему транзакций недостаточно для реализации persistence. |
| Автор: MaxPayneC 28.10.2009, 16:06 |
| Ап. Никто не может ответить? |
| Автор: Samotnik 28.10.2009, 18:21 |
| может следует почитать https://www.hibernate.org/42.html ? Ведь ответ очень легкий. Если прочитаете и не поймете, пишите сюда - обьясню |
| Автор: MaxPayneC 29.10.2009, 12:13 |
| Я читал эту статью ранее. Честно говоря все равно непонятно :( |
| Автор: baph 30.10.2009, 16:29 |
| Пишу приложение на Идее для раюоты с бд на Постгрес, вроде бы тюторы разбирал, читал про Котов, сделал все конфиг-файлы, пропертиесы, хмл и все остально, библиотеки подключил, но не понял про пул соединений (connection pool). Поясните, что, какой сервер нужно запустить, чтобы настроить соединение с бд. Я вроде бы в hibernate.properties все прописал, классы написалЮ, а в бд изменений не происходит. Стал читать про коннектион пул, но так и не понял. |
| Автор: chief39 3.11.2009, 13:01 |
| MaxPayneC, сессия - это такой колышек, к которому привязаны козы(объекты), которых вывел из сарая пастух(достал из базы). Это и отличает http://ru.wikipedia.org/wiki/POJO объекты от хибернейт - про простой(поджо) объект никто кроме тебя не знает. Достал ты его из БД, изменил, сохранил, удалил - это сугубо твоё дело и никакой энтити менеджер не знает и не подозревает что этот объект как-то связан с ДБ и что это вообще за объект А если ты извлёк хибернейт объект или создал ентити объект и сохранил его в БД - он привязывается к хибернейт сессии(тоже объект, а не что-то абстрактное Это кагбэ так: Есть человечек. Он сам по себе, его знают только родители и он нигде не числится и не фигурирует. Хоть умри под забором, хоть миллион найди - пофиг. Но если его набирают в школьный класс(привязывают к сессии) он становится школьником(хибернейт объектом), а не просто обычным человечком. Теперь о нём известно из списков класса. Теперь он попадёт под вакцинацию от гриппа, теперь ему выдадут проездной, теперь его отправят на субботник вместе с остальными объект... школьниками А вот транзакция - это неразрывный кусок работы, который с ними произойдёт. Например: Целый класс собрали у ворот, посадили в автобус, повезли на экскурсию, выгуляли, привезли обратно, выгрузили. В любом случае их или свозят полноценно(коммит) или вернут автобус назад(роллбэк). Потому что нельзя детей за городом бросить, будет по шапке И в то же время можно производить с этим человечком действия, не вовлекая его в транзакцию с иными учениками и автобусом(класс подмёл, почистил зубы) А если детачнуть объект(выгнать из школы) - он опять станет самодостаточным POJO, о котором никому ничего и дела никому нет |
| Автор: AlexeyVorotnikov 5.11.2009, 10:23 |
| chief39, Блестящее объяснение! (Извините за оффтопик) |
| Автор: MaxPayneC 5.11.2009, 19:33 |
| Благодарю) теперь стало действительно яснее. |