En este tema, aprenderemos cómo crear entidades JPA (Java Persistence API) en una aplicación Spring Boot. Las entidades JPA son clases Java que representan tablas en una base de datos relacional. Cada instancia de una entidad JPA corresponde a una fila en la tabla.
Conceptos Clave
- Entidad JPA: Una clase Java que está mapeada a una tabla en la base de datos.
- Anotaciones JPA: Utilizadas para definir el mapeo entre la clase y la tabla, así como entre los campos de la clase y las columnas de la tabla.
- Persistencia: El proceso de almacenar y recuperar datos en una base de datos.
Paso a Paso: Creación de una Entidad JPA
- Definir la Clase de Entidad
Para crear una entidad JPA, primero definimos una clase Java y la anotamos con @Entity
. También necesitamos una clave primaria, que se define con @Id
.
import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; // Constructores, getters y setters public Product() {} public Product(String name, Double price) { this.name = name; this.price = price; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } }
- Anotaciones JPA
@Entity
: Indica que la clase es una entidad JPA.@Id
: Define el campoid
como la clave primaria.@GeneratedValue
: Especifica cómo se generará el valor de la clave primaria. En este caso,GenerationType.IDENTITY
indica que el valor será generado automáticamente por la base de datos.
- Mapeo de Campos
Cada campo de la clase se mapea a una columna en la tabla de la base de datos. Por defecto, JPA utiliza el nombre del campo como el nombre de la columna. Si deseas personalizar el nombre de la columna, puedes usar la anotación @Column
.
import javax.persistence.Column; @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "product_name") private String name; @Column(name = "product_price") private Double price; // Constructores, getters y setters // ... }
- Relaciones entre Entidades
Las entidades JPA pueden tener relaciones entre sí, como @OneToOne
, @OneToMany
, @ManyToOne
, y @ManyToMany
. Aquí hay un ejemplo de una relación @ManyToOne
:
import javax.persistence.ManyToOne; @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; @ManyToOne private Category category; // Constructores, getters y setters // ... } @Entity public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // Constructores, getters y setters // ... }
- Ejemplo Completo
Aquí tienes un ejemplo completo de dos entidades JPA con una relación @ManyToOne
:
import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.ManyToOne; @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; @ManyToOne private Category category; // Constructores, getters y setters public Product() {} public Product(String name, Double price, Category category) { this.name = name; this.price = price; this.category = category; } // Getters y setters // ... } @Entity public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // Constructores, getters y setters public Category() {} public Category(String name) { this.name = name; } // Getters y setters // ... }
Ejercicio Práctico
Ejercicio 1: Crear una Entidad JPA
- Crea una nueva entidad llamada
Customer
con los siguientes campos:id
(Long, clave primaria, generada automáticamente)firstName
(String)lastName
(String)email
(String)
Solución
import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @Entity public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String firstName; private String lastName; private String email; // Constructores, getters y setters public Customer() {} public Customer(String firstName, String lastName, String email) { this.firstName = firstName; this.lastName = lastName; this.email = email; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
Conclusión
En esta sección, hemos aprendido cómo crear entidades JPA en una aplicación Spring Boot. Hemos cubierto las anotaciones básicas necesarias para definir una entidad y cómo mapear relaciones entre entidades. En el próximo módulo, exploraremos cómo utilizar estas entidades con Spring Data JPA para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en la base de datos.
Curso de Spring Boot
Módulo 1: Introducción a Spring Boot
- ¿Qué es Spring Boot?
- Configuración de tu Entorno de Desarrollo
- Creando tu Primera Aplicación Spring Boot
- Entendiendo la Estructura del Proyecto Spring Boot
Módulo 2: Conceptos Básicos de Spring Boot
- Anotaciones de Spring Boot
- Inyección de Dependencias en Spring Boot
- Configuración de Spring Boot
- Propiedades de Spring Boot
Módulo 3: Construyendo Servicios Web RESTful
- Introducción a los Servicios Web RESTful
- Creando Controladores REST
- Manejo de Métodos HTTP
- Manejo de Excepciones en REST
Módulo 4: Acceso a Datos con Spring Boot
- Introducción a Spring Data JPA
- Configuración de Fuentes de Datos
- Creación de Entidades JPA
- Uso de Repositorios de Spring Data
- Métodos de Consulta en Spring Data JPA
Módulo 5: Seguridad en Spring Boot
- Introducción a Spring Security
- Configuración de Spring Security
- Autenticación y Autorización de Usuarios
- Implementación de Autenticación JWT
Módulo 6: Pruebas en Spring Boot
- Introducción a las Pruebas
- Pruebas Unitarias con JUnit
- Pruebas de Integración
- Simulación con Mockito
Módulo 7: Funciones Avanzadas de Spring Boot
Módulo 8: Despliegue de Aplicaciones Spring Boot
Módulo 9: Rendimiento y Monitoreo
- Ajuste de Rendimiento
- Monitoreo con Spring Boot Actuator
- Uso de Prometheus y Grafana
- Gestión de Registros y Logs