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

  1. Entidad JPA: Una clase Java que está mapeada a una tabla en la base de datos.
  2. 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.
  3. Persistencia: El proceso de almacenar y recuperar datos en una base de datos.

Paso a Paso: Creación de una Entidad JPA

  1. 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;
    }
}

  1. Anotaciones JPA

  • @Entity: Indica que la clase es una entidad JPA.
  • @Id: Define el campo id 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.

  1. 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
    // ...
}

  1. 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
    // ...
}

  1. 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

  1. 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

Módulo 2: Conceptos Básicos de Spring Boot

Módulo 3: Construyendo Servicios Web RESTful

Módulo 4: Acceso a Datos con Spring Boot

Módulo 5: Seguridad en Spring Boot

Módulo 6: Pruebas en Spring Boot

Módulo 7: Funciones Avanzadas de Spring Boot

Módulo 8: Despliegue de Aplicaciones Spring Boot

Módulo 9: Rendimiento y Monitoreo

Módulo 10: Mejores Prácticas y Consejos

© Copyright 2024. Todos los derechos reservados