Contenido verificado asociado a este RA
Introducción a ORM y Configuración del Entorno
Esta unidad introduce el concepto de Mapeo Objeto-Relacional (ORM), explica su necesidad para resolver la discrepancia de impedancia entre objetos y bases de datos relacionales, y guía en la instalación y configuración inicial de una herramienta ORM como Hibernate/JPA en un proyecto Java.
Definición de Ficheros de Mapeo y Entidades
Esta unidad se centra en cómo definir el mapeo entre las clases de objetos Java y las tablas de la base de datos relacional, utilizando anotaciones JPA para modelar entidades, atributos y relaciones.
Mecanismos de Persistencia y Operaciones CRUD
Esta unidad explica cómo aplicar los mecanismos de persistencia para interactuar con los objetos en la base de datos, cubriendo las operaciones CRUD (Crear, Leer, Actualizar, Borrar) utilizando el `EntityManager` de JPA.
Modificación y Recuperación de Objetos Persistentes: Operaciones CRUD, JPQL y SQL Nativo
Esta unidad muestra cómo desarrollar aplicaciones que modifican y recuperan objetos persistentes mediante el EntityManager de JPA (persist, find, merge, remove), y cómo ampliar la recuperación con consultas orientadas a objetos (JPQL/HQL) y, cuando es necesario, SQL nativo. El foco está en dominar el ciclo completo de vida del objeto persistente: crearlo, leerlo, actualizarlo y eliminarlo, además de recuperarlo mediante criterios complejos.
Gestión de Transacciones y Concurrencia
Esta unidad aborda la importancia de la gestión de transacciones en aplicaciones de persistencia, explicando las propiedades ACID, los tipos de transacciones y cómo implementarlas y gestionarlas correctamente con JPA para asegurar la integridad de los datos.
Conceptos clave
ORM (Object-Relational Mapping)Discrepancia de impedanciaJPA (Java Persistence API)HibernateMaven/Gradlepersistence.xmlUnidad de PersistenciaDialecto SQLJDBCEntidad JPAAnotaciones JPAClave primaria (`@Id`, `@GeneratedValue`)Mapeo de columnas (`@Column`)Relaciones (`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`)Estrategias de carga (Lazy/Eager)Cascada de operaciones (`CascadeType`)EntityManagerEntityManagerFactory
Errores que conviene evitar
- "ClassNotFoundException" o "NoClassDefFoundError": Causa: Dependencias ORM o JDBC no añadidas o con versiones incorrectas. Corrección: Revisar el `pom.xml` o `build.gradle` y reconstruir el proyecto.
- "PersistenceException: No persistence unit named '...' found": Causa: El archivo `persistence.xml` no está en la ubicación correcta (`src/main/resources/META-INF/`) o el nombre de la unidad de persistencia no coincide. Corrección: Verificar la ruta y el nombre de la unidad.
- "SQLException: Access denied for user '...'@'localhost' (using password: YES)": Causa: Credenciales de base de datos incorrectas en `persistence.xml`. Corrección: Revisar usuario, contraseña y URL de conexión.
- "jakarta.persistence.PersistenceException: No identifier specified for entity": Causa: La clase de entidad no tiene un atributo anotado con `@Id`. Corrección: Añadir `@Id` a la clave primaria.
- "org.hibernate.InstantiationException: No default constructor for entity": Causa: La clase de entidad no tiene un constructor público sin argumentos. Corrección: Añadir `public MiClase() {}`.
- "org.hibernate.AnnotationException: mappedBy reference an unknown target entity property": Causa: El valor de `mappedBy` en una relación bidireccional no coincide con el nombre del atributo en la entidad referenciada. Corrección: Verificar que el nombre del atributo sea exacto.
- "jakarta.persistence.TransactionRequiredException": Causa: Intentar modificar la base de datos sin una transacción activa. Corrección: Iniciar una transacción con `em.getTransaction().begin()` antes de las operaciones de escritura.
- "jakarta.persistence.OptimisticLockException": Causa: Dos transacciones intentan modificar la misma versión de un registro simultáneamente. Corrección: Implementar control de concurrencia optimista (ej. con `@Version`).