Я работаю с Spring Framework 3.0.5, Hibernate 3.6 и MySQL Server 5.1.У меня есть несколько вопросов, касающихся управления транзакциями в целом.Я лично использую декларативное управление транзакциями с весны.Было бы здорово, если бы вы могли ответить на мои вопросы с да / нет (или правильно / неправильно) и, возможно, при необходимости, дать короткие объяснения.Было бы неплохо, если бы несколько человек ответили, если есть разные мнения.Спасибо: -)
1) Вы бы сказали, что это предложение верно: СУБД отвечает за общую реализацию транзакций и их поведение.
1) B) Может быть, было бы лучше сказать: СУБД отвечает за общую реализацию транзакций и поведение базы данных (например, при откате транзакции).
2) Hibernate просто использует соединение с базой данных.Ему нужны транзакции, но он не конфигурирует никаких (!) Настроек, касающихся транзакций и их поведения.
3) Но: для работы с транзакциями Hibernate необходимо ЗНАТЬ, где начинаются транзакции,зафиксированы и требуют отката.
4) Нужно ли Hibernate знать, что происходит в случае отката?Я думаю нет, потому что это должно быть определено в СУБД.(это означает: какие таблицы должны быть заблокированы, какие операции с базами данных должны быть отменены и т. д., правильно?)
5) Для 3) , программныйили можно использовать декларативное управление транзакциями.
6) При использовании программного управления транзакциями все, что нужно знать Hibernate ( 3) ), может быть написано разработчиком в исходном коде вручную.
7) Для декларативного управления транзакциями необходима дополнительная среда для гибернации, FOR EXAMPLE Spring.
8) Spring управляет транзакциями.Это как рамка для них.Он запускает действия, такие как запуск и откат транзакции.
9) Spring также может определить, для каких исключений откат должен или не должен произойти
10) Есть ли у Spring какие-то дополнительные вещи, когда происходит откат?Я думаю, что база данных ответственна за откат, весна только вызывает это, правильно?Это просто чтобы убедиться ....
Спасибо: -)
[РЕДАКТИРОВАТЬ] Это ответ на duffymo, это было слишком долго для комментария, и я неразрешено ответить на мой вопрос в течение 8 часов, поэтому сейчас я должен поставить его здесь.Извините.
@ duffymo
Интересные ответы, вот мои мысли по этому поводу:
Итак, мы согласны, что поведение базы данных (изКонечно!) В случае, если транзакции откатаны или зафиксированы, реализованы или определены непосредственно СУБД, правильно?Я знаю Менеджер транзакций (PlatformTransactionManager), но я действительно думаю, что он просто инициирует транзакции, откат и фиксацию.Это означает, что он не отвечает за то, КАК транзакции обрабатываются базой данных, правильно?Я думаю, что моя вербализация была ошибочной, я обновил ее (1B)
Это немного абстрактно для меня.Означает ли это, что мои предложения были правильными или нет: -)
Как это может отметить это само по себе?Я думаю, что это должно быть сделано разработчиком?Я думаю о «start tx, commit ...», который может сделать разработчик в исходном коде
Согласен. Это одна вещь, которую я нахожу немного трудной для понимания во всех этих документах. Они сообщают о том, какие транзакции отлавливаются, а какие нет, но для того, чтобы выяснить, как с ними обращаться, вы должны выяснить сами. Вначале я был сбит с толку, потому что не был уверен, смогу ли я даже окружить вызов аннотируемого транзакцией метода блоком try / catch, чтобы перехватить исключение и проинформировать пользователя. Просто недостаточно откатить транзакцию, мне нужно, чтобы пользователь был проинформирован. Вот почему я почти везде использую try / catch - как вы справляетесь с этим?
Это один момент, который я не понимаю. Spring предлагает программное и декларативное управление транзакциями. Если Spring управляет транзакциями, то, конечно, используется декларативный transman. Программный ... в моих глазах .. просто программный. Я не уверен, что вы можете сказать «Hibernate == programmatic», потому что вы можете использовать Hibernate как с программным, так и с декларативным управлением транзакциями. Возможно, можно сказать, что hibernate не предлагает САМОГО декларативного управления транзакциями.
Я даже не знал, что это можно сделать «в JDBC» - должен признать, что тогда я не знаю, как это работает в деталях. Как-то забавно, что во время чтения вы подумали, что я против использования декларативных транзакций (если я вас неправильно понял), я действительно ценю декларативное управление транзакциями. :-) Я думаю, что его очень легко использовать, и при чтении кода это очень понятно.
Если я хочу использовать Hibernate с декларативным управлением транзакциями, мне нужна дополнительная инфраструктура, такая как Spring. Потому что декларативный означает, что дополнительный каркас «выполняет всю работу, которую вам придется делать программно». (например, запуск TX, фиксация, откат). И я также думаю, что Spring может быть не единственной платформой, которая предлагает декларативное управление транзакциями для hibernate. Но главное в моем вопросе было то, что невозможно использовать декларативное управление транзакциями для гибернации без использования дополнительного фреймворка. Надеюсь, теперь я правильно произнес это: -)
хорошо, правильно. поэтому диспетчер транзакций запускает откат, начиная tx и т. д.
хорошо ..
- извините: -)
Мне просто нравится понимать, как все работает. Я перечитываю документацию снова и снова, но если вы изучаете все самостоятельно, важно понимать основные факты. Вот почему я спрашиваю :-) Спасибо за вашу помощь! : -)