Во время программирования я натолкнулся на необычную ошибку. Когда я инициализирую целое число в цикле, иногда он говорит, что выражение недопустимо, но иногда оно принимает его.
что произойдет, если код в блоке try
выдаст что-то отличное от RuntimeException
? Похоже, что Hibernate должен быть в состоянии изящно закрыть сеанс с открытой транзакцией в этом случае, предположительно, откатив его назад, но если это правда, зачем вообще вызывать откат
?
Hibernate может многое упростить, но управление транзакциями не очень простое, поэтому для каждой транзакции вы должны очень тщательно продумывать, что вы хотите. Hibernate не может помочь вам с этим.
Если код в блоке try
выдает что-либо, кроме RuntimeException
, ваша транзакция явно не фиксируется. Но и явно не откатываете. Вызов sess.Close
в вашем finally
блоке также не откатывает транзакцию. Что происходит, зависит от того, является ли это вложенной транзакцией: