Tabla de Contenidos

07 - Persistencia con JPA

El punto débil que dejó el hito 06 — stock reservado sin pedido cuando la persistencia falla — es el mejor argumento para este hito. Aplica el tema 05 — Persistencia: Spring JPA: la inversión de dependencias ya existe desde la partida — las interfaces de repositorio viven en domain —, así que lo que cambia es el mecanismo detrás de ellas: la persistencia JDBC se sustituye por JPA/Hibernate, repositorios de Spring Data y mapeos con MapStruct, sin tocar dominio, casos de uso, contrato ni API pública. La paginación a mano con JDBC también desaparece: Spring Data la resuelve.

Pieza Cambio en este hito
Persistencia DAO JDBC → entidades JPA y repositorios Spring Data, en cada módulo
Dominio Sin cambios: las interfaces de repositorio siguen definidas en domain
Paginación LIMIT/OFFSET a mano → Pageable/Page de Spring Data
Mapeos MapStruct entre entidades y modelos del dominio
Transacciones Crear y cancelar pedidos se vuelven atómicos
Pruebas Testcontainers: MariaDB real en las pruebas de persistencia

1. El nuevo mecanismo de persistencia

2. Transacciones

La transacción cruza módulos porque escriben en la misma base de datos. Es el piso del tema 08: una operación auxiliar — enviar la factura, avisar de stock bajo — no debería entrar en esa transacción; de ahí los eventos.

3. Pruebas de persistencia

Criterio del nivel: las pruebas del repositorio van contra la base de datos real del proyecto, no contra un sustituto. La decisión de la práctica: Testcontainers con la misma imagen de MariaDB del curso (fijada en la especificación).

Comprobación

Siguiente hito: hito 08 — Login con JWT.