Я работаю над веб-приложением со Spring Framework 3 и Hibernate 3.6, и я пытаюсь понять, как работает управление транзакциями.
Я использую MySQL Server 5.1 с таблицами InnoDB. Я написал свой DAO на основе простого API Hibernate 3.
1) Правильно ли, что MySQL Server сам определяет, как обрабатываются транзакции? Это означает, что он решает, когда записи должны быть заблокированы или нет?
2) Когда я объявляю метод весной как @transactional (readOnly = true) или @transactional (readOnly = false), это влияет, если записи данных заблокированы во время транзакции? Это означает, что когда readOnly = true, ни одна строка данных не заблокирована, а когда readOnly = false, все используемые записи данных заблокированы?
3) Что происходит, когда я получил readOnly = true и я читаю различные записи данных. Предположим, что в середине чтения они изменяются другой транзакцией, так что я получаю несколько старых записей и несколько новых записей. Это возможно?
4) Когда происходит коммит? После успешной транзакции или когда сессия закрыта?
5) когда начинается Hibernate-сеанс? для каждого сеанса (между сервером и клиентом) или для каждой транзакции?
6) В конце концов, кто несет ответственность за управление транзакциями? весна или mysql или оба?
Спасибо, что ответили! : -)