Volver a la página principal
martes 1 octubre 2024
77

Cómo definir entidades con @Entity en Spring Boot

La anotación @Entity en Spring Boot se utiliza para definir una clase como una entidad de base de datos. Es parte de la especificación JPA (Java Persistence API) y se emplea para mapear clases Java a tablas en una base de datos relacional. Cada instancia de una clase anotada con @Entity representa una fila en la tabla correspondiente, permitiendo a las aplicaciones Spring interactuar con los datos de manera sencilla y orientada a objetos.

¿Qué es @Entity en Spring Boot?

@Entity es una anotación de JPA que se utiliza para marcar una clase como una entidad persistente, lo que significa que sus instancias se pueden almacenar, recuperar, actualizar y eliminar de la base de datos. La clase se convierte en un modelo de datos que Spring Boot y JPA utilizan para realizar operaciones de persistencia automáticamente.

Características clave de @Entity:

1. Mapeo a tablas: La clase se mapea a una tabla de base de datos con el mismo nombre de la clase (a menos que se especifique otra con @Table).

2. Identificador único: Se requiere un campo que actúe como clave primaria, definido con @Id.

3. Campos persistentes: Cada atributo de la clase se convierte en una columna en la tabla correspondiente (a menos que se anote con @Transient).

Ejemplos de uso de @Entity en Spring Boot

1. Definir una entidad básica

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Usuario {

    @Id
    private Long id;
    private String nombre;
    private String correo;

    // Getters y Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }
}

En este ejemplo:

  • @Entity marca la clase Usuario como una entidad.
  • @Id indica que el campo id es la clave primaria de la tabla.
  • Los atributos nombre y correo se convierten en columnas de la tabla Usuario en la base de datos.

2. Personalizar el nombre de la tabla con @Table

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "usuarios") // Define un nombre personalizado para la tabla
public class Usuario {

    @Id
    private Long id;
    private String nombre;
    private String correo;

    // Getters y Setters
}

Aquí, la anotación @Table(name = "usuarios") se usa para especificar que la tabla correspondiente se llamará usuarios en lugar de Usuario.

3. Definir relaciones entre entidades con @OneToMany y @ManyToOne

La anotación @Entity también se puede combinar con otras anotaciones de JPA para definir relaciones entre entidades, como @OneToMany, @ManyToOne, @OneToOne y @ManyToMany.

import javax.persistence.*;
import java.util.List;

@Entity
public class Departamento {

    @Id
    private Long id;
    private String nombre;

    @OneToMany(mappedBy = "departamento") // Relación de uno a muchos con la entidad Usuario
    private List<Usuario> usuarios;

    // Getters y Setters
}

@Entity
public class Usuario {

    @Id
    private Long id;
    private String nombre;

    @ManyToOne // Relación de muchos a uno con la entidad Departamento
    @JoinColumn(name = "departamento_id") // Define la columna de relación
    private Departamento departamento;

    // Getters y Setters
}

En este ejemplo:

  • Departamento tiene una lista de Usuario con la relación @OneToMany.
  • Usuario se relaciona con Departamento usando @ManyToOne.
  • @JoinColumn(name = "departamento_id") especifica la columna en la base de datos que establece la relación.

Consideraciones al usar @Entity

1. Debe tener un identificador: Todas las entidades deben tener un campo marcado con @Id.

2. Debe tener un constructor vacío: JPA requiere que las entidades tengan un constructor público o protegido sin argumentos.

3. No debe ser final: La clase no debe ser final y los métodos de la entidad deben ser accesibles para permitir el proxying de JPA.

Diferencia entre @Entity y otras anotaciones como @Component

Aunque @Entity gestiona la persistencia de datos, no es intercambiable con @Component porque @Entity no participa en el escaneo de componentes ni en la inyección de dependencias como los beans de Spring (@Service, @Controller, @Repository). Sin embargo, es común combinar @Entity con @Repository para definir capas de persistencia en una aplicación Spring Boot.

Referencia oficial

Puedes obtener más información sobre @Entity en la documentación oficial de JPA o la guía de Spring Data JPA.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer