Реализация транзакций в Hibernate или Spring может быть выполнена несколькими способами.Одним из наиболее простых в реализации было бы создание и закрытие транзакции самостоятельно.Как в примере ниже.
public void modifyEmployee(String employeeID) {
Session session = factorySession.openSession();
Transaction transaction = session.beginTransaction();
try {
Employee employee = session.get(Employee.class, employeeID);
employee.setSalary(employee.getSalary()+200);
session.update(employee);
employee.setSalary(employee.getSalary()+100);
session.update(employee);
employee.setSalary(employee.getSalary()-50);
session.update(employee);
} catch(Exception e) {
transaction.rollback();
} finally {
transaction.commit();
session.close();
}
}
Как вы увидите, если какая-либо из транзакций завершится неудачей, мы поймем эту ошибку и откатим транзакцию.Только если мы сможем завершить все обновления без сбоев, тогда мы сможем зафиксировать транзакцию.
Существует гораздо лучший способ сделать это, но требует больше настроек.Я все еще рекомендовал бы это, поскольку это делает управление транзакциями намного проще и код намного чище, и это будет использовать Spring Transactional Manager.Это позволит Spring управлять вашими транзакциями, так что вам не придется беспокоиться о фиксации, открытии или даже закрытии сессии.Кроме того, с использованием аннотации:
@Transactional(rollbackFor = Exception.class)
Над любыми методами службы всегда следует откатывать любые изменения, сделанные внутри метода, если какая-либо из операций завершается неудачей, даже те, которые не связаны с базой данных.
Надеюсь, это поможет.