📝 Persistencia_datos_ORM
← Volver

Persistencia de Datos y ORM

1. ¿Qué es la Persistencia de Datos?

En el desarrollo de software, los datos que maneja un programa residen en la memoria RAM durante su ejecución. Cuando el proceso termina, esos datos desaparecen. La persistencia es la capacidad de almacenar esos datos de forma duradera, más allá del ciclo de vida de la aplicación, típicamente en una base de datos, un fichero o cualquier otro medio de almacenamiento no volátil.

Ciclo de vida de un objeto en memoria

Programa en ejecución
        |
   [Objeto en RAM]  ──► Se pierde al terminar el proceso
        |
   Motor de persistencia
        |
   [Registro en BD]  ──► Sobrevive al proceso

2. El Motor de Persistencia

Un motor de persistencia (persistence engine) es el componente de software encargado de trasladar objetos que existen en memoria a un almacenamiento duradero, como una base de datos relacional, y de recuperarlos cuando sea necesario.

Sus responsabilidades principales son:

Estas cuatro operaciones se conocen colectivamente como CRUD (Create, Read, Update, Delete).

El motor de persistencia actúa como un puente entre el mundo orientado a objetos del código y el mundo relacional de la base de datos.


3. El Problema del Desajuste Objeto-Relacional

Las aplicaciones modernas se desarrollan con Programación Orientada a Objetos (POO), donde los datos se modelan como objetos con atributos, métodos y relaciones de herencia. Sin embargo, las bases de datos relacionales almacenan datos en tablas, filas y columnas, un modelo estructuralmente diferente.

Este conflicto se denomina impedance mismatch (desajuste de impedancia) y se manifiesta en problemas como:

Concepto en POO Equivalente en BD Relacional
Clase Tabla
Objeto / Instancia Fila / Registro
Atributo Columna
Relación de herencia No tiene equivalente directo
Asociación entre objetos Clave foránea (Foreign Key)

Gestionar esta traducción manualmente (escribiendo SQL a mano para cada objeto) es tedioso, propenso a errores y dificulta el mantenimiento del código. Aquí es donde entra el ORM.


4. ORM: Mapeo Objeto-Relacional

ORM son las siglas de Object-Relational Mapping (Mapeo Objeto-Relacional). Es una técnica de programación que permite interactuar con una base de datos relacional utilizando el paradigma orientado a objetos, abstrayendo la necesidad de escribir sentencias SQL directamente.

Un framework ORM actúa como un motor de persistencia automatizado: el desarrollador trabaja con objetos y el ORM se encarga de generar y ejecutar el SQL necesario de forma transparente.

Funcionamiento básico

Código de la aplicación (POO)
         |
     [ ORM ]
    /       \
  SQL       SQL
   |         |
[INSERT]  [SELECT]
   |         |
  Base de datos relacional

Ventajas del uso de un ORM


5. Frameworks ORM más importantes

5.1 Hibernate (Java)

Hibernate es el framework ORM más popular del ecosistema Java. Fue creado por Gavin King en 2001 y se convirtió en la implementación de referencia de la especificación JPA (Java Persistence API), que es el estándar oficial de Java para la persistencia de objetos.

Características clave:

Ejemplo de entidad con anotaciones JPA/Hibernate:

@Entity
@Table(name = "usuarios")
public class Usuario {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "nombre_usuario", nullable = false, length = 50)
    private String nombre;

    @Column(name = "email", unique = true)
    private String email;

    // Getters y setters...
}

Con este mapeo, Hibernate es capaz de generar automáticamente las sentencias INSERT, SELECT, UPDATE y DELETE correspondientes a la tabla usuarios.


5.2 Doctrine (PHP)

Doctrine es el framework ORM equivalente a Hibernate pero para el ecosistema PHP. Es la solución de persistencia estándar en frameworks PHP como Symfony y también está disponible para otros proyectos PHP.

Características clave:

Ejemplo de entidad con atributos de PHP:

#[ORM\Entity]
#[ORM\Table(name: 'usuarios')]
class Usuario
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private ?int $id = null;

    #[ORM\Column(name: 'nombre_usuario', length: 50, nullable: false)]
    private string $nombre;

    #[ORM\Column(unique: true)]
    private string $email;

    // Getters y setters...
}

6. Hibernate vs. Doctrine: Comparativa

Aunque pertenecen a ecosistemas de lenguajes distintos (Java y PHP respectivamente), Hibernate y Doctrine comparten la misma filosofía y funcionalidades fundamentales.

Característica Hibernate Doctrine
Lenguaje Java PHP
Especificación base JPA (Java Persistence API) Propio (inspirado en JPA)
Lenguaje de consulta HQL DQL
Gestor de persistencia Session / EntityManager EntityManager
Configuración de mapeo Anotaciones, XML Anotaciones, Atributos, YAML, XML
Frameworks asociados Spring, Jakarta EE Symfony, otros
Compatibilidad con BD Múltiples (MySQL, PostgreSQL, Oracle...) Múltiples (MySQL, PostgreSQL, SQLite...)

Ambos frameworks:


7. Otros ORM destacados

El concepto de ORM está presente en prácticamente todos los lenguajes de programación modernos:

Lenguaje Framework ORM
Python SQLAlchemy, Django ORM
JavaScript / Node.js Sequelize, TypeORM, Prisma
Ruby ActiveRecord (Ruby on Rails)
C# / .NET Entity Framework Core
Go GORM

8. Resumen de conceptos clave