En Hibernate, la forma en que ejecutas las operaciones CRUD depende de si estás usando la interfaz nativa de Hibernate (Session) o el estándar moderno de Java (EntityManager de JPA, que es lo que viene integrado por defecto en Spring Boot a través de Spring Data JPA).
A continuación, se presentan los métodos principales agrupados por cada operación del CRUD para ambas opciones:
1. Create (Crear / Insertar)
Para guardar un nuevo registro en la base de datos:
EntityManager (Recomendado/Spring Boot):persist(entity): Introduce la entidad en el contexto de persistencia. Al hacer commit, se ejecuta el INSERT.
Session (Nativo de Hibernate):save(entity): Guarda la entidad y retorna su identificador generado. (Obsoleto en versiones recientes).persist(entity): Funciona igual que en JPA.
2. Read (Leer / Buscar)
Para recuperar registros de la base de datos:
EntityManager (Recomendado/Spring Boot):find(Class, id): Busca un registro por su clave primaria. Si no existe, devuelve null.getReference(Class, id): Devuelve un proxy (una referencia ligera). No va a la base de datos hasta que accedes a un atributo. Ideal para asociar relaciones sin cargar todo el objeto.
Session (Nativo de Hibernate):get(Class, id): Equivalente a find(). Va directo a la base de datos.load(Class, id): Equivalente a getReference(). Lanza una excepción si el id no existe al intentar usar el objeto.
3. Update (Actualizar / Modificar)
Para modificar un registro existente:
EntityManager (Recomendado/Spring Boot):merge(entity): Toma un objeto modificado (que puede estar desasociado de la sesión), lo copia en una entidad persistente y ejecuta el UPDATE.- Modificación automática (Dirty Checking): Si recuperas un objeto con
find() dentro de una transacción y modificas un atributo con su set(), Hibernate detecta el cambio automáticamente y hace el UPDATE al terminar el método, sin necesidad de llamar a ningún método explícito.
Session (Nativo de Hibernate):update(entity): Fuerza la actualización del objeto en la base de datos.saveOrUpdate(entity): Analiza el objeto; si no tiene ID hace un INSERT, si ya tiene ID hace un UPDATE.
4. Delete (Borrar / Eliminar)
Para remover un registro:
EntityManager (Recomendado/Spring Boot):remove(entity): Elimina la entidad de la base de datos. Nota: La entidad debe estar gestionada primero (debes haberla buscado con find() antes de borrarla).
Session (Nativo de Hibernate):delete(entity): Equivalente a remove().
| Operación CRUD |
Método (JPA / Hibernate) |
Descripción Detallada de su Función |
| Create |
persist(entidad) |
Registra una nueva entidad en el contexto de Hibernate. La guarda en memoria y genera el comando INSERT en la base de datos de manera eficiente al finalizar la transacción. |
| Create |
save(entidad) (Nativo) |
Método antiguo de Hibernate. Inserta el registro de inmediato en la base de datos para obtener y retornar el ID autogenerado. Actualmente está en desuso. |
| Read |
find(Clase, id) / get() |
Busca un registro por su ID directamente en la base de datos. Si lo encuentra, trae todos sus datos y mapea el objeto; si no existe, devuelve null. |
| Read |
getReference() / load() |
Crea un objeto "falso" (proxy) que solo contiene el ID. No realiza la consulta SQL a la base de datos sino hasta que intentas acceder a algún otro atributo del objeto. Optimiza el rendimiento. |
| Update |
merge(entidad) |
Toma una entidad modificada que está fuera de la sesión actual (vía JSON por ejemplo), busca su registro real en la base de datos y lo actualiza con los nuevos valores. |
| Update |
Dirty Checking (Automático) |
Mecanismo que detecta automáticamente los cambios hechos con métodos .set() en objetos recuperados previamente. Ejecuta el UPDATE al terminar la transacción sin invocar ningún método de guardado. |
| Delete |
remove(entidad) / delete() |
Elimina de forma física el registro en la base de datos. Requiere obligatoriamente que la entidad haya sido buscada y cargada en memoria previamente mediante un método de lectura. |