Transacciones
Una transacción nos ofrece esencialmente una opción: o todas las operaciones dentro de ella se completan exitosamente, o ninguna de ellas se ejecuta en absoluto.
Imagine una operación de transferencia bancaria, donde el dinero se mueve de una cuenta a otra. Este proceso implica dos pasos:
- Descontar dinero de una cuenta;
- Depositar dinero en otra cuenta.
Si la transacción falla después de descontar el dinero pero antes de depositarlo, los fondos podrían "perderse". Una transacción garantiza que ambas operaciones se completen totalmente o se reviertan por completo.
Fundamentos de la gestión de transacciones
La anotación @Transactional: Se utiliza para declarar métodos o clases que deben ejecutarse dentro del contexto de una transacción.
Cuando se llama a un método con esta anotación, Spring inicia una nueva transacción. Si el método finaliza correctamente, la transacción se confirma; de lo contrario, se revierte.
A continuación, se presenta un ejemplo basado en el escenario real mencionado anteriormente.
BankService.java
1234567891011121314151617@Service public class BankService { private AccountRepository accountRepository; @Transactional public void transferMoney(Long fromAccountId, Long toAccountId, double amount) { Account fromAccount = accountRepository.findById(fromAccountId); Account toAccount = accountRepository.findById(toAccountId); fromAccount.withdraw(amount); toAccount.deposit(amount); accountRepository.save(fromAccount); accountRepository.save(toAccount); } }
Cuando el método transferMoney está marcado con la anotación @Transactional, significa que todos los cambios que ocurren dentro de este método se ejecutarán dentro de una única transacción.
Cuando se llama a fromAccount.withdraw(amount) seguido de toAccount.deposit(amount), ambas acciones deben completarse exitosamente. Si, por ejemplo, ocurre un error durante la operación toAccount.deposit(amount), la transacción automáticamente revertirá los cambios realizados durante el paso fromAccount.withdraw(amount).
Esto garantiza que ambas operaciones se ejecuten y el dinero sea transferido, o, en caso de error, ninguna operación se realice, evitando cualquier pérdida de fondos. La transacción garantiza que la base de datos nunca quede en un estado inconsistente.
Aplicación práctica de las transacciones
Resumen
Una transacción es un conjunto de operaciones de base de datos tratadas como una unidad única, asegurando que todas las operaciones tengan éxito juntas o se reviertan completamente en caso de fallo. Puede obtener más información sobre transacciones aquí.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 3.45
Transacciones
Desliza para mostrar el menú
Una transacción nos ofrece esencialmente una opción: o todas las operaciones dentro de ella se completan exitosamente, o ninguna de ellas se ejecuta en absoluto.
Imagine una operación de transferencia bancaria, donde el dinero se mueve de una cuenta a otra. Este proceso implica dos pasos:
- Descontar dinero de una cuenta;
- Depositar dinero en otra cuenta.
Si la transacción falla después de descontar el dinero pero antes de depositarlo, los fondos podrían "perderse". Una transacción garantiza que ambas operaciones se completen totalmente o se reviertan por completo.
Fundamentos de la gestión de transacciones
La anotación @Transactional: Se utiliza para declarar métodos o clases que deben ejecutarse dentro del contexto de una transacción.
Cuando se llama a un método con esta anotación, Spring inicia una nueva transacción. Si el método finaliza correctamente, la transacción se confirma; de lo contrario, se revierte.
A continuación, se presenta un ejemplo basado en el escenario real mencionado anteriormente.
BankService.java
1234567891011121314151617@Service public class BankService { private AccountRepository accountRepository; @Transactional public void transferMoney(Long fromAccountId, Long toAccountId, double amount) { Account fromAccount = accountRepository.findById(fromAccountId); Account toAccount = accountRepository.findById(toAccountId); fromAccount.withdraw(amount); toAccount.deposit(amount); accountRepository.save(fromAccount); accountRepository.save(toAccount); } }
Cuando el método transferMoney está marcado con la anotación @Transactional, significa que todos los cambios que ocurren dentro de este método se ejecutarán dentro de una única transacción.
Cuando se llama a fromAccount.withdraw(amount) seguido de toAccount.deposit(amount), ambas acciones deben completarse exitosamente. Si, por ejemplo, ocurre un error durante la operación toAccount.deposit(amount), la transacción automáticamente revertirá los cambios realizados durante el paso fromAccount.withdraw(amount).
Esto garantiza que ambas operaciones se ejecuten y el dinero sea transferido, o, en caso de error, ninguna operación se realice, evitando cualquier pérdida de fondos. La transacción garantiza que la base de datos nunca quede en un estado inconsistente.
Aplicación práctica de las transacciones
Resumen
Una transacción es un conjunto de operaciones de base de datos tratadas como una unidad única, asegurando que todas las operaciones tengan éxito juntas o se reviertan completamente en caso de fallo. Puede obtener más información sobre transacciones aquí.
¡Gracias por tus comentarios!