Desarrollador Java: pregunta de entrevista

¿Cómo funciona @Transactional de Spring?

@Transactional suele aplicarse mediante un proxy de Spring que abre, confirma o revierte una transacción alrededor de una llamada interceptada; la auto-invocación evita el proxy y los defaults de rollback importan.

Respuesta directa

Qué debe cubrir una buena respuesta

Cómo funciona

Spring envuelve un bean con métodos @Transactional en un proxy. El proxy intercepta las llamadas externas, inicia o se une a una transacción según la propagación, asocia la conexión al hilo y confirma al retornar o revierte cuando escapa una RuntimeException; las excepciones comprobadas no provocan rollback salvo que rollbackFor lo indique. Como la intercepción vive en el proxy, un método que llama a otro método @Transactional sobre this lo esquiva por completo, y los métodos privados o final no pueden interceptarse.

Ejemplo

Un método de servicio @Transactional que llama a this.saveAudit(), anotado con REQUIRES_NEW, ejecuta la auditoría dentro de la transacción externa y la pierde en el rollback porque la autollamada nunca pasó por el proxy. Mover saveAudit a un bean separado restaura la transacción independiente prevista.

Errores frecuentes

  • Anotar un método de interfaz y esperar que aplique con proxies basados en clase.
  • Capturar una excepción dentro del método transaccional y esperar que la transacción se revierta igualmente.
  • Mantener una transacción abierta durante una llamada HTTP remota y agotar el pool de conexiones bajo carga.

Una estructura útil para responder

Responde desde tu propia experiencia.

No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.

Practica esta respuesta con MiraHint

Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.

Descargar MiraHint
Preguntas de entrevista para Desarrollador Java