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.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.