es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring JPA – procedimiento almacenado transaccional para obtener e incrementar.

Tengo un procedimiento almacenado de MySQL que:

  1. Lee el valor numérico de una columna (no PK) llamada current_tag_id.
  2. Incrementa la columna.
CREATE PROCEDURE GET_AND_INCREMENT(IN table_id BIGINT, out tag BIGINT)
BEGIN
select current_tag_id INTO tag from my_table where id = table_id;
update my_table set current_tag_id = current_tag_id + 1 where id = table_id;
END

Dado que quiero que esta operación sea atómica, debo envolverla en una transacción para mi aplicación de Spring Boot.

Mi pregunta es: ¿Debo envolver el procedimiento almacenado de MySQL en una transacción de MySQL (con BEGIN/COMMIT) o debería llamar al procedimiento almacenado con Spring JPA en un método anotado con @Transactional(isolation = Isolation.SERIALIZABLE)?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Tanto las transacciones de MySQL como las transacciones de Spring JPA ofrecen atomicidad, por lo que cualquiera de las opciones funcionaría para asegurar que la operación del procedimiento almacenado se realice de forma atómica. Sin embargo, se recomienda llamar al procedimiento almacenado con Spring JPA en un método anotado con @Transactional(isolation = Isolation.SERIALIZABLE) ya que ofrece más flexibilidad y facilidad de uso dentro de la aplicación Spring Boot. Además, el uso de transacciones de Spring JPA permite una gestión más sencilla de la transacción a nivel de la aplicación y ofrece soporte para deshacer transacciones en caso de errores o excepciones.

Comments are closed.