Ir al contenido

¿Qué es JPA?

·366 palabras·2 mins
Programación Bases De Datos
Alejandro Duarte
Autor
Alejandro Duarte
Alejandro Duarte es Ingeniero de Software, escritor, Ingeniero de Relaciones con Desarrolladores en MariaDB y consultor en desarrollo de software. Ha programado computadores desde mediados de los 90s. Comenzando con BASIC, Alejandro transitó a C, C++ y Java durante sus años académicos en la Universidad Nacional de Colombia. Se mudó primero al Reino Unido y luego a Finlandia para profundizar su participación en la industria del código abierto. Alejandro es reconocido en círculos de Java y MariaDB.

Nota: Traducido de la versión original en Inglés.

JPA significa Jakarta Persistence API (anteriormente, Java Persistence API). Es una especificación de una API para conectividad de bases de datos desde aplicaciones Java. Dado que JPA es solo una especificación, necesitas una implementación para poder usarla. La implementación más popular es Hibernate ORM.

ORM significa Mapeo Objeto/Relacional (Object-Relational Mapping) y es una técnica para representar tablas SQL en objetos Java (o de cualquier otro lenguaje de programación) y viceversa. Por ejemplo, tal vez tienes una tabla programming_language en la base de datos y quieres leer filas de allí y almacenarlas en objetos Java de una clase que creaste, por ejemplo, ProgrammingLanguage. Lo que tienes que hacer es usar anotaciones JPA (o configuraciones XML equivalentes, que, para ser honesto, hace años que no veo un proyecto usando XML en lugar de anotaciones JPA) para decirle al framework ORM cómo poner los datos de la base de datos en los campos Java y cómo poner datos de los campos Java en la tabla SQL. El siguiente es un ejemplo:

import jakarta.persistence.*;

@Entity
@Table(name = "programming_language")
public class ProgrammingLanguage {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "pl_id")
    private Integer id;

    @Column(name = "pl_name")
    private String name;

    @Column(name = "pl_rating")
    private Integer rating;

    ... equals, hashCode, setters, getters ...
}

Esto te permite leer y escribir datos. Por ejemplo:

EntityManagerFactory entityManagerFactory =
    Persistence.createEntityManagerFactory("jpa-demo-local");

EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();

transaction.begin();

// escribir datos:
entityManager.persist(new ProgrammingLanguage("Java", 10));

// leer datos:
List<ProgrammingLanguage> list = entityManager.createQuery(
		"select p from ProgrammingLanguage p where p.rating > 5",
		ProgrammingLanguage.class
).getResultList();

transaction.commit(); // o transaction.rollback();

Para que esto funcione, también necesitas definir una Unidad de Persistencia (Persistence Unit). Esto lo puedes hacer en un archivo XML llamado persistence.xml en el que se define el nombre utilizado para crear el EntityManagerFactory en el fragmento de código anterior más los detalles de conexión de la base de datos:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
    <persistence-unit name="jpa-demo-local" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/jpa_demo"/>
            <property name="jakarta.persistence.jdbc.user" value="usuario"/>
            <property name="jakarta.persistence.jdbc.password" value="contraseña"/>
            <property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create"/>
        </properties>
    </persistence-unit>
</persistence>

Realmente, esta fue una introducción extremadamente corta, pero tengo un video más detallado aunque introductorio que demuestra cómo usar JPA con Hibernate. Échale un vistazo:

¿Te gustó este artículo? Puedo ayudar a tu equipo a implementar soluciones similares. Contáctame para saber más.

Relacionados

¿Qué es un pool de conexiones de base de datos?
·273 palabras·2 mins
Programación Bases De Datos
Una explicación de los pools de conexiones de base de datos y cómo usarlos en aplicaciones Java.
Cómo ejecutar consultas SQL desde Java (y prevenir inyecciones SQL)
·250 palabras·2 mins
Programación Bases De Datos
Instrucciones sobre cómo ejecutar consultas SQL en Java y prevenir inyecciones SQL.
Cómo abrir y cerrar conexiones JDBC
·162 palabras·1 min
Programación Bases De Datos
Guía sobre cómo abrir y cerrar conexiones JDBC en Java.