Saltar al contenido

¿Cuál es la diferencia entre una “transacción Spring” y una “transacción Hibernate”?

Solución:

Bueno, para empezar, ambos son Transacciones, pero abarcan diferentes conceptos y componentes.

TL; DR

Hibernate se ocupa de transacciones específicas de bases de datos, mientras que Spring proporciona un servicio general de gestión de transacciones. @Transactional es una buena forma de configurar el comportamiento de la gestión de transacciones.

La larga historia:

Actas

Las transacciones son básicamente unidades de trabajo (es decir, cambios en algo) que se gestionan como una única operación que puede confirmarse o revertirse. Hay muchos tipos diferentes de transacciones en el mundo de Java: bases de datos, sistemas de mensajería como JMS, transacciones entre aplicaciones (para aquellos que no son débiles de corazón) o cualquier otra cosa que deba incluirse en una transacción. En el estándar de Java, las transacciones se gestionan mediante la API de transacciones de Java, que establece las reglas sobre cómo participar en una transacción.

Hibernar

Hibernate es un ORM para abstraer componentes de bases de datos a objetos Java, por lo que sus transacciones están específicamente relacionadas con los cambios realizados dentro de una base de datos. Una transacción puede estar formada por una o varias escrituras en varias tablas de la base de datos que se confirman una vez que se completa la operación. Revertir la transacción, por ejemplo, si hay algún error durante la operación, permite deshacer todos los cambios.

Primavera

En su nivel más bajo, Spring es un marco de aplicación para administrar la configuración y las dependencias entre objetos. Además, también proporciona una interfaz para administrar servicios de nivel superior que se utilizan en aplicaciones modernas como bases de datos, servicios de mensajería, marcos MVC y transacciones.

Spring está diseñado para ser utilizado como un maestro integral de objetos y servicios dentro de su aplicación, por lo que su concepto de transacción está en un nivel más alto que las transacciones específicas de la base de datos de las que se ocupa hibernación. Las transacciones de Spring están diseñadas para brindarle un control detallado de todos sus recursos transaccionales mientras se abstrae la codificación, a menudo desordenada, requerida para coordinar las transacciones.

@Transactional

Spring proporciona algunos métodos diferentes para usar transacciones, entre otros, aspectos basados ​​en xml, codificación para la API y transacciones declarativas basadas en anotaciones. Las transacciones basadas en anotaciones son útiles porque no necesita agregar el código repetitivo de administración de transacciones a su aplicación (incluso el uso de PlatformTransactionManager a través de la API tiene bastante sobrecarga de codificación).

Entonces, básicamente, ¿qué pasa con @Transactional es que, en tiempo de ejecución, Spring escanea su base de código en busca de clases y métodos @Transactional y los envuelve en el código de administración específico de la transacción, según lo que haya configurado a través de la anotación. Entonces, un método como este:

@Transactional(propagation = REQUIRES_NEW, rollbackFor = {Exception.class})
public void saveAndSendMessage(Foo foo) throws Exception {
    dbManager.save(foo);
    Bar bar = transform(foo);
    jmsSystem.send(bar);
}  

Spring puede configurar una nueva transacción para la base de datos y el sistema jms, y coordinarlos sin necesidad de agregar automáticamente todo el código de administración de tx específico.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *