Spring, Hibernate, MySQL - Как работают транзакции - Заключение / вопросы **

Я работаю с 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) Для декларативного управления транзакциями необходима дополнительная структура для гибернации, НАПРИМЕР Spring.

8) Spring управляет транзакциями. Для них это как рамка. Он запускает действия, такие как запуск и откат транзакции.

9) Spring также может определять, для каких исключений должен или не должен происходить откат

10) Есть ли у Spring какие-либо дополнительные действия при откате? Я думаю, что база данных отвечает за откат, пружина просто запускает его, верно? Просто чтобы убедиться ....

Спасибо: -)


[РЕДАКТИРОВАТЬ] Это ответ на duffymo, он был слишком длинным для комментария, и мне не разрешено отвечать на свой вопрос в течение 8 часов, поэтому сейчас я должен поместить его здесь. Извините.

@duffymo

Интересные ответы, вот мои мысли по этому поводу:

  1. Итак, мы согласны с тем, что поведение базы данных (конечно же!) В случае отката или фиксации транзакций реализовано или определяется непосредственно СУБД, правильно? Я знаю диспетчер транзакций (PlatformTransactionManager), но я действительно думаю, что он просто инициирует транзакции, откатывается и фиксируется. Это означает, что это не относится к тому, КАК транзакции обрабатываются базой данных, верно? Я предполагаю, что моя вербализация была ошибочной, я ее обновил (1B)

  2. Это для меня немного абстрактно. Означает ли это, что мои предложения были правильными, или нет: -)

  3. Как он сам может это отметить? Думаю, это должен сделать разработчик? Я думаю о "start tx, commit ...", что может быть сделано в исходном коде разработчиком

  4. Я согласен. Это одна вещь, которую мне немного трудно понять во всех этих документах. Они говорят о том, какие транзакции перехватываются, а какие нет, но чтобы узнать, как с ними справиться, вы должны выяснить это сами. Вначале я был сбит с толку, потому что не был уверен, смогу ли я даже окружить вызов метода с аннотациями транзакций блоком try / catch, чтобы поймать исключение и сообщить пользователю. Просто откатить транзакцию недостаточно, Мне нужно, чтобы пользователь был проинформирован. Вот почему я почти везде использую try / catch - как вы справляетесь с этим?

  5. Это один момент, который я не понимаю. Spring предлагает программное и декларативное управление транзакциями. Если сам Spring управляет транзакциями, конечно, используется декларативный преобразователь. Программатик - это ... в моих глазах ... просто программный. Я не уверен, можно ли сказать «Hibernate == programmatic», потому что вы можете использовать Hibernate как с программным, так и с декларативным управлением транзакциями. Возможно, можно сказать, что hibernate не предлагает САМО декларативное управление транзакциями.

  6. Я даже не знал, что это возможно сделать «в JDBC» - должен признать, что тогда я не знаю, как это работает. Как-то смешно, что, читая, вы подумали, что я против использования декларативных транзакций (если я вас правильно понял), я очень ценю декларативное управление транзакциями. :-) Я думаю, что его очень легко использовать, а при чтении кода он очень понятен.

  7. Если я хочу использовать Hibernate с декларативным управлением транзакциями, мне нужна дополнительная структура, такая как Spring. Потому что декларативность означает, что дополнительная структура «выполняет всю работу, которую вам придется выполнять программно». (например, запуск tx, фиксация, откат). И я также предполагаю, что Spring может быть не единственной структурой, которая предлагает декларативное управление транзакциями для гибернации. Но главным в моем вопросе было то, что невозможно использовать декларативное управление транзакциями для спящего режима без использования дополнительной структуры. Надеюсь, теперь я правильно сформулировал это: -)

  8. хорошо, правильно. поэтому диспетчер транзакций запускает откат, запуск tx и так далее

  9. ок ..

  10. извините: -)

Мне просто нравится понимать, как все работает. Я перечитываю документацию снова и снова, но если вы все изучаете сами, важно понимать основные факты. Поэтому и спрашиваю :-) Спасибо за помощь! : -)

5
задан nano7 11 May 2011 в 13:15
поделиться